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?

asp.net mvc 和 web api 哪个更好 Http POST 或 PUT