我可以将WebApi添加到没有MVC6的ASP.NET 5(vnext)项目吗?

时间:2015-09-15 03:28:32

标签: c# asp.net asp.net-web-api

我有一个vanilla html / javascript网站,我准备添加一些WebApi的东西。在asp.net 4中,我只是从NuGet添加WebApi,我可以开始添加从ApiController继承的ApiControllers(在Global文件中进行一些设置之后)。

我在ASP.NET 5(vnext)项目中尝试了这个,但它没有用。虽然添加using System.Web.Http;确实摆脱了我班级ApiController下的曲线:

[Route("api/contact/requestACall")]
public class ContactController : ApiController
{
}

...在尝试编译时我仍然遇到错误。

Error CS0246 The type or namespace name 'Route' could not be found (are you missing a using directive or an assembly reference?) [my namespace].DNX Core 5.0 [my project path]\Controllers\ContactController.cs 5

Error CS0246 The type or namespace name 'ApiController' could not be found (are you missing a using directive or an assembly reference?) [my namespace].DNX Core 5.0 [my project path]\Controllers\ContactController.cs 6

我用谷歌搜索了几个小时,我发现每次演练都是添加MVC6以添加api控制器。但是,我在这个站点中不需要任何MVC功能,因为我正在使用angular并在客户端上完成所有这些功能。

如果没有带上所有这些MVC行李,我如何使用WebApi?我知道ASP.NET 5的重点是确保你永远不必包含你不会使用的东西,所以我确信我错过了一些东西。

1 个答案:

答案 0 :(得分:4)

简短的回答是,你不能。在vNext中结合了多个框架。

ASP.NET MVC来源的文档清楚地将此特定分支描述为:模型视图控制器框架,用于构建动态网站,并清晰地分离关注点,包括合并的MVC,Web API和带Razor的Web页面。我对此的解释是,它们是完全合并的,不能也不应该在vNext下分开。

此外,如果您查看vNext中ApiController的{​​{3}},您会发现包含以下参考:

using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.ActionResults;
using Microsoft.AspNet.Mvc.Actions;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.ModelBinding.Validation;
using Microsoft.AspNet.Mvc.WebApiCompatShim;

如果没有ASP.NET 5中的核心MVC依赖项,就不可能使用ApiController

根据评论,如果你看一下这个source,你会发现“WebAPI”控制器(控制器的主要责任是返回api数据而不是web内容)继承自Controller }。

using Microsoft.AspNet.Mvc;
...
Route("api/[controller]")]
public class TodoController : Controller

总之,在vNext中,只有一个控制器应该使用,无论传递的内容类型是Controller,它应该只 来自Microsoft.AspNet.Mvc

不推荐使用

System.Web.Http,并且在vNext中未使用Microsoft.AspNet.WebAPI