3

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

附带说明一下,由于某种原因,请求没有显示在提琴手中,当您尝试调试这些东西时,这有点烦人。

任何帮助表示赞赏。

4

2 回答 2

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

代码示例:

RouteTable.Routes.MapHttpRoute(
name: "Default2Api",
       routeTemplate: "api/{controller}/{action}",
       defaults: new { controller = "Uploads", action = "GetUpload", custAction = RouteParameter.Optional});
于 2012-12-04T12:54:16.033 回答
1

是的,我遇到了同样的问题,很可能您的问题是 webapi 默认情况下不允许跨域调用,或者至少这是我所知道的。

你需要为你的 web api 代码添加一个 CORS 支持,按照这个人展示的链接如何将 CORS 添加到你的 webapi

http://code.msdn.microsoft.com/CORS-support-in-ASPNET-Web-01e9980a

祝你好运。

于 2012-12-04T14:37:56.570 回答