将 API 从类似 REST 的路由转换为命名参数
Converting API from REST-like routing to named parameters
我创建了一个 API 来查找参数...
http://server/api/contollerName/param1/param2/param3
对于此模式,我使用了以下方法属性:
[Route("api/myController/{param1}/{param2}/{param3}")]
[HttpGet]
public IHttpActionResult myMethod(int param1, int param2, int param3)
{
// Method implementation goes here
}
然而,使用 API 的人(UI 开发人员)更愿意将 API 设置为这样...
http://server/api/controllerName?param1=value¶m2=value¶m3=value
我认为我需要做的就是删除我的方法的属性,Web Api 路由引擎将根据参数名称选择正确的方法,这样的想法是否正确?有没有办法像我最初所做的那样修改路由以显式定义方法和参数?我喜欢指定路线,这样就不会对将要执行的方法产生歧义。
您认为您需要做的就是删除方法的属性,这是正确的。您将无法定义格式为
的路由模板
http://server/api/controllerName?param1=value¶m2=value¶m3=value
因为ASP.NetWeb API2路由模板不允许包含“?”路由模板中的字符。您最接近的是
http://server/api/controllerName/MethodName/param1={param1},param2={param2}
另请注意,如果您在路由模板中有 &,ASP.NET 将抛出一个错误,指出检测到危险的 Request.Path 值,当您发出请求命中那个 API 时.这可以通过参考这个 SO Question
来解决
我创建了一个 API 来查找参数...
http://server/api/contollerName/param1/param2/param3
对于此模式,我使用了以下方法属性:
[Route("api/myController/{param1}/{param2}/{param3}")]
[HttpGet]
public IHttpActionResult myMethod(int param1, int param2, int param3)
{
// Method implementation goes here
}
然而,使用 API 的人(UI 开发人员)更愿意将 API 设置为这样...
http://server/api/controllerName?param1=value¶m2=value¶m3=value
我认为我需要做的就是删除我的方法的属性,Web Api 路由引擎将根据参数名称选择正确的方法,这样的想法是否正确?有没有办法像我最初所做的那样修改路由以显式定义方法和参数?我喜欢指定路线,这样就不会对将要执行的方法产生歧义。
您认为您需要做的就是删除方法的属性,这是正确的。您将无法定义格式为
的路由模板http://server/api/controllerName?param1=value¶m2=value¶m3=value
因为ASP.NetWeb API2路由模板不允许包含“?”路由模板中的字符。您最接近的是
http://server/api/controllerName/MethodName/param1={param1},param2={param2}
另请注意,如果您在路由模板中有 &,ASP.NET 将抛出一个错误,指出检测到危险的 Request.Path 值,当您发出请求命中那个 API 时.这可以通过参考这个 SO Question
来解决