我有一个 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。
下面是一个仅接受 URL 中的 GUID 字符串的 ID 控制器:
[System.Web.Http.Route("{id:guid}")]
public class MyApiController: ApiController
{
public HttpResponseMessage Get(Guid id)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
搜索控制器将匹配像这样的 url"/search"
。这是搜索控制器:
[System.Web.Http.Route("search")]
public class SearchController : ApiController
{
public HttpResponseMessage Get()
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
约束将防止路由器中的匹配冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)