gpt4 book ai didi

c# - 路由参数和多种 Controller 类型

转载 作者:行者123 更新时间:2023-11-30 17:46:10 35 4
gpt4 key购买 nike

我有一个 asp.net web api,使用属性在 Controller 上进行路由。操作级别没有路由属性。访问资源的路由是:

[Route("{id}"]
public MyApiController: ApiController
{
public HttpResponseMessage Get(Guid id)
{
// ...
}
}

我的问题是,当我想创建一个搜索 Controller 时,我希望 URL 是

[Route("search")]

但这会导致错误:Multiple controller types were found that match the URL。是否可以确保在选择通用路由之前选择完全匹配的路由?

从技术上讲,短语 search 可能是第一个 Controller 的有效 ID,但由于 {id} 是一个 guid,情况永远不会是这样,因此我想选择路由完全匹配的 Controller 。

最佳答案

您可以使用路由约束 来完成这项工作。例如,您可以限制您的 ID 路由只接受有效的 GUID。

这是一个 ID Controller ,它只接受 URL 中的 GUID 字符串:

[System.Web.Http.Route("{id:guid}")]
public class MyApiController: ApiController
{
public HttpResponseMessage Get(Guid id)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}

Search Controller 会匹配一个类似 "/search" 的 url。这是搜索 Controller :

[System.Web.Http.Route("search")]
public class SearchController : ApiController
{
public HttpResponseMessage Get()
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}

约束将防止路由器中的匹配冲突。

关于c# - 路由参数和多种 Controller 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26584113/

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