gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 4 中的 Web Api 中的路由

转载 作者:行者123 更新时间:2023-12-04 10:19:40 25 4
gpt4 key购买 nike

我在 ASP.NET MVC 4 中使用 web api。

我有以下命名 Controller

  • 客户 Controller : Controller
  • CustomerApiController : ApiController

  • 之前我的 CustomerApiController被命名 CustomersController所以要访问它,我只需要输入以下网址

    localhost/api/Customers



    但现在我必须将 api Controller 名称保留为 CustomerApiController .我希望能够使用 localhost/api/Customers 使用相同的方法我需要做哪些改变?

    我尝试在 RouteConfig.cs 中进行一些更改文件。我尝试将以下内容添加到 RegisterRoutes 方法,但它们都不起作用。
    routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    );

    routes.MapRoute(
    name: "Customers",
    url: "api/customer/",
    defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional }
    );

    请有人指导我。谢谢

    最佳答案

    那么您的代码中有两个问题。您正在使用 MapRoute 而不是 MapHttpRoute。你还应该把更详细的路线放在第一位,这样它就不会被更通用的路线吞没:

    routes.MapHttpRoute(
    name: "Customer",
    url: "api/Customer/{id}",
    defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional }
    );

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

    现在,如果您希望您的解决方案更通用(当您有更多需要像这样修改的 Controller 时),您可以使用自定义 HttpControllerRouteHandler转换传入的 Controller 名称,这样您就可以保持默认路由。

    首先你需要创建自定义 HttpControllerRouteHandler :
    public class CustomHttpControllerRouteHandler : HttpControllerRouteHandler
    {
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
    requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString() + "Api";

    return base.GetHttpHandler(requestContext);
    }
    }

    现在你可以像这样注册你的 HttpRoute:
    routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    ).RouteHandler = new CustomHttpControllerRouteHandler();

    这样,当您将 Customer 放入 URL 时,引擎会将其视为 CustomerApi。

    关于asp.net-mvc - ASP.NET MVC 4 中的 Web Api 中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742803/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com