C# 4.0框架中的Web API请求

C# 4.0框架中的Web API请求,c#,asp.net-mvc,asp.net-4.0,C#,Asp.net Mvc,Asp.net 4.0,我必须使用4.0框架创建web API,但我无法提出请求: public class ChartDataApiController : ApiController { [HttpGet] public List<ChartDatum> GetData(int lowerBound, int upperBound) { return new List<ChartDatum>(); } } 我就是打不到这个动作。我试着把它转换

我必须使用4.0框架创建web API,但我无法提出请求:

public class ChartDataApiController : ApiController
{
    [HttpGet]
    public List<ChartDatum> GetData(int lowerBound, int upperBound)
    {
        return new List<ChartDatum>();
    }
}
我就是打不到这个动作。我试着把它转换成一个帖子,只是想看看我是否能让它工作,但没有用。服务器错误给出404(必须修改才能提交):

获取http://(url):端口#/api/ChartDataApi/GetData?lowerBound=0&upperBound=29404(未找到)

只要我不试图通过查询字符串或请求体传递任何参数,我就可以发出一个请求。我还尝试使用
[FromUri]
属性作为参数的前缀,但这也不起作用

以下是web api路由配置(仅为默认配置):


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

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


应用于
GetData
方法的
HttpGetAttribute
仅表示此方法负责挂起
httpget
请求;无需在请求URI中显式指定
GetData
方法名称。

因此在4.0中不能按名称引用操作?我知道这在4.5中是可能的,但我不知道这在4.0中是不可行的。如果可能,我希望在此控制器上有多个GET操作。编辑:尝试删除操作名称后,我收到相同的错误。甚至将动作重命名为“Get”。这似乎是对的。。。我记得MVC的路由在4.0和4.5之间进行了改进。。我认为在4.0版中,您将不得不更多地使用元数据/数据注释(或者简单地说是“属性”)。这一差异实际上使我不愿意使用MVC路由开发API。。只需添加一个IHttpHandler页面或HttpModule并将该文件注册为路由提供程序,就更简洁、更简单了。。如果我没记错的话,这基本上就是框架在幕后所做的…在webforms中,它仍然是我的方法..你可以按名称引用操作,只需修改路由模板:
routeTemplate:
4.0虽然正确,但不能推断操作名称?。。您仍然需要在方法上指定它。。我想
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
    }
});
public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}