0

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

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
    }
}

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

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

那不是“WebDav”问题,没有安装,在我的Web.Config中我用“”删除了它......

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

4

1 回答 1

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;
}

更多信息:ASP.NET Web API 中的路由

于 2013-09-16T19:49:11.203 回答