2016-09-28 66 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的实例。