我有一个名为“UploadsController”的控制器。我有这样的GET动作:
public string GetUpload([FromUri]string action)
{
return "hey " + action;
}
如果我在浏览器中导航到以下API URL,则会得到成功的响应。
http://localhost:52841/MySite/api/uploads?action=testaction
但是,当我尝试在我的WebForms应用程序中从代码隐藏中调用API时,我收到了404响应。
这是我在Global.aspx文件中的内容(尽管我相信第一个应该这样做):
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
RouteTable.Routes.MapHttpRoute(
name: "Default2Api",
routeTemplate: "api/{controller}/{action}",
defaults: new { controller = "Uploads", action = "GetUpload" });
以下是我如何调用API:
// Send a request asynchronously continue when complete
client.GetAsync("http://localhost:52841/MySite/api/uploads?action=testaction").ContinueWith(
(requestTask) =>
{
// Get HTTP response from completed task.
HttpResponseMessage response = requestTask.Result;
// Check that response was successful or throw exception
response.EnsureSuccessStatusCode();
// Read response asynchronously as JsonValue
response.Content.ReadAsAsync<string>().ContinueWith(
(readTask) =>
{
var result = readTask.Result;
//Do something with the result
});
});
我以为我之前已经完成了这个(使用RC版本,现在使用RTM),但我似乎无法得到这个。
作为旁注,由于某些原因,请求没有显示在提琴手中,当你试图调试这些东西时,这有点烦人。
感谢任何帮助。
答案 0 :(得分:2)
代码示例:
RouteTable.Routes.MapHttpRoute(
name: "Default2Api",
routeTemplate: "api/{controller}/{action}",
defaults: new { controller = "Uploads", action = "GetUpload", custAction = RouteParameter.Optional});
答案 1 :(得分:1)
是的,我遇到过同样的问题,很可能是你的问题是webapi默认不允许跨域调用,或者至少这是我所知道的。
您需要为您的网络API代码添加CORS支持,请按照此人显示如何将CORS添加到您的webapi的链接
http://code.msdn.microsoft.com/CORS-support-in-ASPNET-Web-01e9980a
祝你好运。