C# 从ASP.Net网站Webforms调用ASP.Net Web API
在过去的几个小时里,我一直在尝试执行C# 从ASP.Net网站Webforms调用ASP.Net Web API,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,在过去的几个小时里,我一直在尝试执行asp.netwebforms网站中托管的webapi操作。 我知道它是有线的,但由于旧的项目设计,我不得不这样做。每次我在控制器中调用动作时 {"Message":"No HTTP resource was found that matches the request URI 'http://localhost:3049/api/chart/test?id=58'.","MessageDetail":"No action was found on the c
asp.netwebforms网站中托管的webapi操作
。
我知道它是有线的,但由于旧的项目设计,我不得不这样做。每次我在控制器中调用动作时
{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:3049/api/chart/test?id=58'.","MessageDetail":"No action was found on the controller 'Chart' that matches the request."}
我的项目结构如下:-
我的类代码看起来非常简单:-
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors();
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
}
我的控制器:-
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class ChartController : ApiController
{
[HttpGet]
public static string test(string id)
{
return id;
}
}
我错过了什么?让你的动作方法非静态。在微软的文档中,他们这样说:
控制器上的哪些方法被视为“操作”?选择操作时,框架只查看控制器上的公共实例方法
此外,您的路由的形式是api/{controller}/{id}
,但您正在访问的URL的形式是/api/controller/action?id=string
。注意到不匹配吗?您可以更改操作方法以匹配路线
[HttpGet]
public string Get(string id)
{
return id;
}
然后访问/api/chart/58
使用Web API中的默认路由结构,您的路由将告诉它所选的控制器、所选的操作方法基于HTTP方法(GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH)和参数,然后URL的其他段将成为参数
了解更多详细信息。我从未见过这样的静态控制器方法。它不应该是一个实例方法吗?此外,路由映射似乎并不意味着在路由中使用操作名称。根据WebAPI的版本,您可能需要简单地命名方法Get
,而不是test
。