【问题标题】:Asp.Net Core - MVC Vs WebAPI routing differenceAsp.Net Core - MVC 与 WebAPI 路由区别
【发布时间】:2017-06-26 10:41:24
【问题描述】:

此问题可能较早提出,因此可能重复。

当我们配置 ASP.NET 核心应用程序 (MVC) 时,我们在 Startup.cs - 配置 - app.useMvc() 下定义和映射路由。这非常有效。 但是,当 WebAPI 出现时,为什么我们需要专门指定 [Route("api/[controller]") 呢?或者说webAPI只适用于属性路由?

为什么Configure方法不能处理这个路由配置?在早期的 MVC/WebAPI(不是核心)中,这是一个不错的选择。

我错过了什么吗?

【问题讨论】:

  • 你是在应用中同时使用mvc &web api还是在不同的应用中使用?
  • 我有完整的独立 webapi 项目。想通过startup.cs而不是每个控制器级别进行路由配置

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

在 ASP.NET Core MVC 中,MVC 和 Web API 之间没有区别(就像在 MVC 5 / Web API 2 中一样)。无论请求是返回 View 还是其他类型的 ActionResult,路由都应该以相同的方式工作。也就是说,属性路由是 ASP.NET Core MVC 中的默认约定,因为它使路由逻辑更接近响应路由的代码。您仍然可以在 Startup.Configure 中设置全局路由(如您所见),但传统的推荐方法是在控制器和/或操作级别使用属性。

如果您发现特定(网络 API)操作未使用您在全局范围内设置的路由,请发布代码(可能在另一个问题中),因为这听起来不像预期的那样对我的行为。

【讨论】:

  • “也就是说,属性路由是 ASP.NET Core MVC 中的默认约定,因为它使路由逻辑更接近于响应路由的代码。” ,如果这是 ASP.NET Core 团队所说的,我可以参考一下吗?
  • “MVC 应用程序可以混合使用常规路由和属性路由。通常为为浏览器提供 HTML 页面的控制器使用常规路由,为提供 REST API 的控制器使用属性路由。”来自docs.microsoft.com/en-us/aspnet/core/mvc/controllers/… 是我能做到的。
  • 但是,如果我们来自 asp.net mvc-webapi 背景,这两种情况都可以正常工作,全局路由配置和属性路由。
  • 嗨,史密斯,你能看看这个问题stackoverflow.com/questions/45679478/… - 使用属性路由,当我更改方法的主体时似乎不起作用。
【解决方案2】:

Web API 路由与 MVC 路由非常相似。在 Web API 路由中,我们可以在 URL 的开头找到“api/”,这使它与 MVC 路由不同。在 Web API 路由中,“action”参数不是强制性的,但可以包含在路由的一部分中。

API 路由:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

MVC 路由:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Library", action = "Index", id = UrlParameter.Optional }
        );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2020-11-25
    • 2020-09-01
    • 2018-08-11
    相关资源
    最近更新 更多