我有一个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的重点是确保你永远不必包含你不会使用的东西,所以我确信我错过了一些东西。
答案 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
。