asp.net 如何变成 MVC 或 WebApi?
Posted
技术标签:
【中文标题】asp.net 如何变成 MVC 或 WebApi?【英文标题】:How an asp.net becomes MVC or WebApi? 【发布时间】:2019-01-28 12:31:26 【问题描述】:我正在尝试在 MVC 和 WebApi 之间进行选择,因此在某些情况下 WebApi 更好(文档、测试等),而在某些情况下 MVC 控制器更好(在渲染 Razor 页面等时)
但是当我创建一个 asp.net MVC web 应用程序时,不会检测到从 ApiController 继承的任何控制器,如果我创建一个 asp.net WebApi web 应用程序,则不会检测到任何从 System.Web.Mvc.Controller
继承的控制器。
我比较了这两个网络应用的web.config
,没有什么不同。
我有 2 个问题
如果两个 web.config 相同,那么一个应用程序如何检测仅控制器从 System.Web.Mvc.Controller
继承,而另一个应用程序检测仅控制器从 ApiController
继承?他们有什么不同?
我可以将 Web 应用配置为支持这两种控制器类型吗?
【问题讨论】:
未检测到是什么意思?你的意思是路由不起作用? 是的,路由不起作用 在 asp.net core 中,Web 应用程序可以支持这两种类型的控制器。每个 Web 应用程序都是 .Net 核心中的控制台应用程序。 不幸的是我正在使用.Net Framework 【参考方案1】:您需要执行的步骤是:
1- 制作Mvc
Web 应用程序添加对System.Web.Http.WebHost
的引用。
2- 添加App_Start\WebApiConfig.cs
(参见下面的代码sn-p)。
3- 在Global.asax.cs
中导入命名空间System.Web.Http
。
4- 在注册默认 Web 应用程序路由之前,在 MvcApplication.Application_Start()
(在文件 Global.asax.cs 中)调用 WebApiConfig.Register(GlobalConfiguration.Configuration)
,否则会优先。
5- 添加从System.Web.Http.ApiController
派生的控制器。
然后我可以从 tutorial(您的第一个 ASP.NET Web API)中学到足够的知识来定义我的 API 控制器。
App_Start\WebApiConfig.cs:
using System.Web.Http;
class WebApiConfig
public static void Register(HttpConfiguration configuration)
configuration.Routes.MapHttpRoute("API Default", "api/controller/id",
new id = RouteParameter.Optional );
Global.asax.cs:
using System.Web.Http;
...
protected void Application_Start()
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
WebApiConfig.Register(GlobalConfiguration.Configuration);
RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
必须安装 NuGet 包 Microsoft.AspNet.WebApi
才能使上述功能正常工作。
【讨论】:
【参考方案2】:如果您右键单击并“转到定义”两个控制器,您会发现它们属于不同的命名空间,甚至实现不同的基类,因此您将无法从两个“ApiController”(Web -Api)和“控制器”(MVC)同时(据我所知)。
但是,如果您在同一个项目中需要两个控制器,您只需右键单击并添加“Web-Api”控制器或“MVC 控制器”。
然后你就可以在 MVC 控制器代码上实际实例化和使用“Web-Api”控制器了
【讨论】:
以上是关于asp.net 如何变成 MVC 或 WebApi?的主要内容,如果未能解决你的问题,请参考以下文章
如何正确调用 ASP .NET MVC WebAPI 2 方法
如何在 ASP.NET MVC/WebAPI 应用程序中支持 HTTP OPTIONS 动词
如何在 Asp.net MVC 中添加 Web Api,然后在同一个应用程序中使用 WebAPI
了解 ASP.NET(MVC、Web API)中的令牌生成/验证
前端 ASP.NET MVC4 作为一个项目,ASP.NET Web API 作为同一解决方案中的另一个项目 - 如何从前端调用 WebAPI?