2016-09-28 64 views
1

我的網頁API的樣子:瞭解有關網絡API構造

[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    private readonly ApplicationDbContext _context; 

    public ValuesController(ApplicationDbContext context) 
    { 
     _context = context; 
    } 

    [HttpGet] 
    public string Get() 
    { 
     // get random user 

     var user = _context.Users.SingleOrDefault(); 

     return user?.Email ?? ""; 
    } 
} 

嘗試通過jQuery來調用它:

$.get('/api/values', function (email) { 
    console.log(email) 
}) 

我有2個問題:

1 /。爲什麼沒有console.log(email)工作,雖然我得到的迴應成功?

1

有沒有在Console標籤。

2 /。當我做出服務器(/api/values)的請求,斷點已被抓:

2

我的問題:哪裏有ValuesController被稱爲內context?我已經給來自客戶端的請求,然後構造被打(我敢肯定,我不喜歡ApplicationDbContext從客戶端發送的東西服務器:V)

UPDATE:通過改變$.get('/api/values', {}, function (email) {}$.get('/api/values', function (email) {}。我已經解決了第一個問題。這是我的不好。對於那個很抱歉。

+0

從$ .get('/ api/values',{},function(email)'改爲'.get('/ api/values',function(email) '? – Win

+0

@Win對不起,我只是用一個解釋來更新問題,我的錯誤 –

+5

第二個與請求管道或你發送的內容無關,你的請求參數將通過控制器動作傳遞。與請求沒有任何關係。在繼續開發應用程序之前,您需要了解更多關於依賴注入等概念的知識,這對理解它至關重要。 – Tseng

回答

2

較短的回答

我的問題:哪裏有ValuesController被稱爲範圍內?我從客戶端發送了一個請求,然後構造函數被擊中。

HTTP請求到達。 ASP.NET MVC Routing告訴應用程序使用ValuesController來處理請求。該應用程序構建了ValuesController,通過依賴注入提供了一個ApplicationDbContext的實例。

再回應

Startup.Configure方法用於指定ASP.NET應用程序將如何個別HTTP請求進行響應。由於您正在使用Web API,因此您已配置app.UseMvc()。結果:當HTTP請求到達時,MVC路由會通知應用程序使用適當的控制器。

Startup.ConfigureServices方法用於指定通過依賴注入可用的服務。由於您正在向構造函數中注入ApplicationDbContext,因此您已配置services.AddDbContext<ApplicationDbContext>()。結果:當應用程序構建ValuesController時,ASP.NET依賴關係注入將提供ApplicationDbContext的實例。