为什么我的路由启用的HttpGet方法被视为不支持GET

本文关键字:不支持 GET 方法 HttpGet 我的路 我的 路由 启用 为什么 | 更新日期: 2023-09-27 18:29:03

我有一对GET和POSTWeb API方法,它们运行良好。我有另一对似乎是以完全相同的方式设置的,但是GET方法拒绝接受调用。所有这样做的尝试都以消息结尾,"请求的资源不支持http方法'GET'。"

然而(再次)此GET方法的设置和装饰与工作方法相同。

这是一个有效的方法(未标记的"GET"(第一个方法)和标记的"POST"都在调用时成功输入):

[RoutePrefix("api/pricecompliance")]
public class PriceComplianceController : ApiController
{
    [Route("{unit}/{begindate}")]
    public HttpResponseMessage Get(string unit, string begindate)
    {
        . . .

    [Route("{unit}/{begindate}")]
    [HttpPost]
    public void Post(string unit, string begindate)
    {
        . . .

这是看起来几乎相同的一对(当然是不同的名字,还有一个参数):

[RoutePrefix("api/produceusage")]
public class ProduceUsageController : ApiController
{
    [Route("{unit}/{begindate}/{enddate}")]
    public HttpResponseMessage Get(string unit, string beginRange, string 
endRange)
    {
        . . .
    [Route("{unit}/{begindate}/{enddate}")]
    [HttpPost]
    public void Post(string unit, string begindate, string enddate)
    {
        . . .

如前所述,对于不工作的第二块代码,当我尝试调用"GET"时,我得到:

请求的资源不支持http方法"GET"

我确实有这样设置的属性路由:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
        // Web API routes
        config.MapHttpAttributeRoutes();

为什么在后一种情况下不支持GET?

当我试图通过点击带有URL的链接来调用GET时,以及当我试图用""从Postman调用GET时http://localhost:52194/api/produceusage/gramps/201312/201412",我得到了同样的"不支持获取"爵士乐。

为什么我的路由启用的HttpGet方法被视为不支持GET

原来我不得不更改这个:

public HttpResponseMessage Get(string unit, string beginRange, string endRange)

到此:

public HttpResponseMessage Get(string unit, string begindate, string enddate)

以便参数名称与路由中的名称完全匹配:

[Route("{unit}/{begindate}/{enddate}")]

为什么这很重要我不知道,但确实如此。