【问题标题】:Web API requests in 4.0 framework4.0 框架中的 Web API 请求
【发布时间】:2014-11-06 17:55:30
【问题描述】:

我必须使用 4.0 框架来创建 Web API,但我无法发出请求:

public class ChartDataApiController : ApiController
{
    [HttpGet]
    public List<ChartDatum> GetData(int lowerBound, int upperBound)
    {
        return new List<ChartDatum>();
    }
}

我现在有这个只是为了确认我真的可以完成这个动作。请求:

var url = window.location.protocol + "//" + window.location.host + "/api/ChartDataApi/GetData";
$.ajax({
    url: url,
    type: "GET",
    data: {
        lowerBound: lowerBound,
        upperBound: upperBound
    },
    dataType: "json",
    success: function(response) {
         graph.draw(response);
    },
    error: function(message) {
         //error handler logic
    }
});

我只是无法执行此操作。我尝试将其转换为 POST 只是为了看看我是否可以让它工作但无济于事。服务器错误给出 404(必须修改才能提交):

GET http:// (url) : port# /api/ChartDataApi/GetData?lowerBound=0&upperBound=29 404(未找到)

只要我不尝试通过查询字符串或请求正文传递任何参数,我就可以发出请求。我也试过在参数前面加上 [FromUri] 属性,但这也没有用。

这里是 web api 路由配置(只是默认):

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

我之前也提出过这类请求,但总是在 4.5 框架中,并认为这可能是框架之间的差异。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-4.0


    【解决方案1】:

    您正在请求错误的资源。在您的情况下,您应该向 /api/ChartDataApi 端点发出 GET 请求。

    HttpGetAttribute 应用于GetData 方法只是表示该方法负责挂起HTTP GET 请求;无需在请求 URI 中显式指定 GetData 方法名称。

    【讨论】:

    • 那么您不能在 4.0 中按名称引用操作?我知道这在 4.5 中是可能的,但不知道这在 4.0 中是不可行的。如果可能的话,我想在这个控制器上有多个 GET 操作。编辑:尝试删除操作名称后,我收到相同的错误。甚至将操作重命名为“获取”。
    • 这似乎是对的......我记得 MVC 的路由在 4.0 和 4.5 之间有所改进......我认为你将不得不在 4.0 中更多地使用元数据/数据注释(或简单地“属性”)
    • 这种差异实际上是让我不再使用 MVC 路由开发 api 的原因。只需添加一个 IHttpHandler 页面或 HttpModule 并将文件注册为路由提供程序就更简洁、更简单了。这是基本上框架在幕后做了什么,如果我没记错的话......在网络表单中,它仍然是我的方法......
    • 可以通过名字引用action,只需修改路由模板:routeTemplate: "api/{controller}/{action}/{id}"
    • 4.0 并没有推断出动作名称,但对吗?.. 你仍然需要在方法上指定它.. 我认为
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多