【发布时间】:2019-01-08 16:00:02
【问题描述】:
下面是我的控制器和动作:
[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
[HttpGet]
[Route("")]
public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
{
}
}
这里是 WebApi.config:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/",
defaults: new { id = RouteParameter.Optional }
此链接有效:
localhost:59253/api/PaymentManagementController?commandType=check&account=ParamValue1&txnId=SomePrefix0123456789
但是,我希望它是:
localhost:59253/api/PaymentManagementController/CheckStatus?commandType=check&account=ParamValue1&txnId=SomePrefix0123456789
即使将路由标记如下:
[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
[HttpGet]
[Route("CheckStatus/{commandType}/{account}/{txnId}")]
public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
{
}
}
我收到错误:
未找到与请求 URI 'localhost:59253/api/PaymentManagementController?commandType=check&account=ParamValue1&txnId=SomePrefix0123456789' 匹配的 HTTP 资源。 在与请求匹配的控制器“PaymentManagement”上未找到任何操作。
【问题讨论】:
-
我相信您应该为“CheckStatus/{commandType}/{account}/{txnId}”测试的路线应该是 'localhost:59253/api/PaymentManagementController/CheckStatus/check/ParamValue1/SomePrefix0123456789'鉴于您的第二个路由,第一个,控制器工作正常,因为您将 null 字符串分配给该方法。
标签: c# asp.net-web-api binding routing query-string