ASP.NET Web API作为具有自定义路由的服务 - 不允许使用405方法

时间:2013-09-16 19:17:30

标签: asp.net-mvc web-services asp.net-web-api

我已经创建了一个ASP.NET Web API项目,我不想使用像“PUT”,“GET”这样的动词,所以我在WebApiConfig中创建了自己的路径。 / p>

Public static void Register(HttpConfiguration config)
{
   config.Routes.MapHttpRoute(
       name: "DefaultApi",
       routeTemplate: "api/{controller}/{action}/{id}",
       defaults: new { id = RouteParameter.Optional }
      );
}

然后我创建了一个非常简单的ApiController

public class EWebApiController : ApiController
{
    public HttpResponseMessage ByEntryFilter(long? id)
    {
        HttpResponseMessage response = Request.CreateResponse<string>(HttpStatusCode.OK, "Test string");
        return response;
  }
}

现在我可以启动Web应用程序来托管我的WebApi。

然后我创建了一个简单的控制台应用程序来调用我的WebApi函数

static void Main(string[] args)
{
    //WebClient webClient = new WebClient();
    //byte[] data = webClient.DownloadData("http://localhost:51762/api/EWebApi/ByEntryFilter/2/");
    //string date = System.Text.Encoding.Default.GetString(data);

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:51762/");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = client.GetAsync("api/EWebApi/ByEntryFilter/2").Result;  // Blocking call!
    if (response.IsSuccessStatusCode)
    {
           //Never Reached because auf 405 method not allowed
    }
}

在这里我Allways得到405方法不允许错误。同时使用WebClient和HttpClient调用。

当我使用默认ApiRoute和使用GET时,...动词一切正常。

没有“WebDav”问题,那些没有安装并且在我的Web.Config中我已经用“”删除它....

当我在我的WebProject内的网站上使用我的路线与本地jQuery AJAX调用时,我的ApiRoute也像魅力一样工作,没有405错误。

1 个答案:

答案 0 :(得分:0)

如果您没有使用 Restful 模式附加GET,PUT,DELETE,POST ...您必须提供Attributes来告诉操作 HTTP 方法这将是:

[AcceptVerbs("GET", "HEAD")]
public HttpResponseMessage ByEntryFilter(long? id)
{
    HttpResponseMessage response = Request.CreateResponse<string>(HttpStatusCode.OK, "Test string");
    return response;
}

或者

[HttpGet]
[ActionName("ByEntryFilter")]
public HttpResponseMessage ByEntryFilter(long? id)
{
    HttpResponseMessage response = Request.CreateResponse<string>(HttpStatusCode.OK, "Test string");
    return response;
}

此处提供更多信息:Routing in ASP.NET Web API