我已经创建了一个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错误。
答案 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