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

本文关键字:NET vnext 项目 MVC6 没有 WebApi 添加 ASP 我可以 | 更新日期: 2023-09-27 18:12:41

我有一个香草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

我已经搜索了几个小时,我能找到的每一个演练都是为了添加api控制器而添加MVC6。然而,我不需要任何MVC功能在这个网站,因为我使用angular和做所有的客户端。

我如何使用WebApi而不带来所有这些MVC包袱?我知道ASP的全部意义。. NET 5是为了确保你永远不必包含你不打算使用的东西,所以我肯定我错过了一些东西。

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

简短的回答是不能。vNext中已经组合了多个框架。

ASP. exe的文档。NET MVC源代码清楚地将这个分支描述为:模型-视图-控制器框架,用于构建具有清晰关注点分离的动态网站,包括合并的MVC、web API和web Pages w/Razor。我对此的解释是,是的,它们是完全合并的,在vNext下不能也不应该分开。

此外,如果您查看vNext中ApiController的源代码,您会发现包含以下引用:

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;

这使得在没有核心MVC依赖的情况下无法在ASP中使用ApiController。5 .

根据这些注释,如果你看一下本教程,你会发现"WebAPI"控制器(主要责任是返回api数据而不是web内容的控制器)继承自Controller

using Microsoft.AspNet.Mvc;
...
Route("api/[controller]")]
public class TodoController : Controller
总而言之,在vNext中,无论要传递的内容类型如何,您都应该使用一个控制器,即Controller,并且它应该只有来自Microsoft.AspNet.Mvc

System.Web.Http已弃用,Microsoft.AspNet.WebAPI在vNext中不使用。