gpt4 book ai didi

asp.net-web-api - WebApi 中 Controller 名称的连字符 url

转载 作者:行者123 更新时间:2023-12-02 20:44:30 27 4
gpt4 key购买 nike

我正在尝试将类似于 /action-figure/ 的网址映射到 ActionFigureController。即,让 Controller 的网址用连字符分隔。

类似于 this answer exactly ,但用于 WebApi 而不是 MVC 路由。

如何在 WebApi 中配置我的网址?

几乎所有的 google 搜索都会将我引导至 MVC 路由配置,但我无法找到与之等效的内容:

config.MapHttpAttributeRoutes();

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

as MvcRouteHandler 不适用于此,我不确定在哪里传递自定义路由配置。

最佳答案

虽然可能无法像 ASP.NET MVC 中那样设置多个路由,但请尝试使用 Attribute Routing利用易于使用的注释来指定路线。

要启用属性路由,您需要在注册方法中进行设置:

config.MapHttpAttributeRoutes();

这使您可以方便地为每种方法设置路由:

[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }

此外,RoutePrefix允许避免重复提供整个路径:

[RoutePrefix("api/books")]
public class BooksController : ApiController
{
// GET api/books
[Route("")]
public IEnumerable<Book> Get() { ... }

// GET api/books/5
[Route("{id:int}")]
public Book Get(int id) { ... }

// POST api/books
[Route("")]
public HttpResponseMessage Post(Book book) { ... }
}

编辑回到您的评论:

看看这个 answer以及 DefaultHttpControllerSelector 派生并填充某些逻辑的方式:

using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Dispatcher;

public class ApiControllerSelector : DefaultHttpControllerSelector
{
public ApiControllerSelector (HttpConfiguration configuration) : base(configuration) { }

public override string GetControllerName(HttpRequestMessage request)
{
// add logic to remove hyphen from controller name lookup of the controller
return base.GetControllerName(request).Replace("-", string.Empty);
}
}

要实现此功能,您需要在配置中指定自定义 ApiControllerSelector,如下所示:

config.Services.Replace(typeof(IHttpControllerSelector),
new ApiControllerSelector(config));

关于asp.net-web-api - WebApi 中 Controller 名称的连字符 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34653445/

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