路由参数和多种控制器类型
本文关键字:控制器 类型 参数 路由 | 更新日期: 2023-09-27 18:28:06
我有一个asp.net web api,使用控制器上的路由属性。操作级别上没有路由属性。访问资源的路径是:
[Route("{id}"]
public MyApiController: ApiController
{
public HttpResponseMessage Get(Guid id)
{
// ...
}
}
我的问题是,当我想创建一个搜索控制器时,我希望URL是
[Route("search")]
但这会导致一个错误:Multiple controller types were found that match the URL
。是否可以确保在选择通用路线之前选择完全匹配的路线?
从技术上讲,短语search
可能是第一个控制器的有效ID,但由于{id}
是一个guid,因此永远不会出现这种情况,因此我想选择具有完全匹配路由的控制器。
您可以使用路由约束来完成此项工作。例如,您可以将ID路由限制为只接受有效的GUID。
这里有一个ID控制器,它只接受URL中的GUID字符串:
[System.Web.Http.Route("{id:guid}")]
public class MyApiController: ApiController
{
public HttpResponseMessage Get(Guid id)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
搜索控制器将与类似"/search"
的url相匹配。这是搜索控制器:
[System.Web.Http.Route("search")]
public class SearchController : ApiController
{
public HttpResponseMessage Get()
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
约束将防止路由器中的匹配冲突。