WebForms 404中的ASP.NET Web API

时间:2012-11-19 15:36:29

标签: asp.net asp.net-web-api webforms

我有一个名为“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),但我似乎无法得到这个。

作为旁注,由于某些原因,请求没有显示在提琴手中,当你试图调试这些东西时,这有点烦人。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

  1. 尝试将查询字符串参数命名为其他内容(现在它是“action”)。我认为这是造成问题的一个原因。由于MVC是基于约定的,因此可能会导致问题。
  2. 同样在您的路线声明中,尝试添加查询字符串参数(我称之为 custAction )。
  3. 并在默认路由前声明自定义路由。
  4. 代码示例:

    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

祝你好运。