我有一个WebAPI,
public class SystemHealtController : ApiController
{
[HttpGet]
public IHttpActionResult UpdateUsageDetail(string cpuUsage, string memoryUsage, string diskUsage)
{
// Do Stuff
return Ok();
}
RouteConfig也有默认设置,
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Job", action = "Index", id = UrlParameter.Optional }
);
}
}
但是当我导航到API网址http://localhost:64384/API/SystemHealt/UpdateUsageDetail?cpuUsage=2&memoryUsage=4&diskUsage=76
时,会出现以下错误:
HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
我唯一怀疑的是,在创建Controller之前,我安装了
Microsoft.AspNet.WebApi
然后卸载以及怀疑可能是问题。但卸载后也没有错误。
答案 0 :(得分:2)
默认情况下,web api路由已在WebApiConfig
类中注册
路线模式api/{controller}/{id}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
您可以看到没有操作方法名称。这些方法由动词(POST或GET,您正在进行的调用类型)访问。因此,通常您将创建GET方法(以读取数据)和POST方法以将数据发布到(用于创建/更新数据)。当你想使用这些端点时,你将使用相同的url,但Http方法将是不同的(GET和POST)
所以你应该像
那样访问它yourSiteBaseUrl/api/SystemHealt?cpuUsage=2&memoryUsage=4&diskUsage=76
这应该有效,假设您在应用中启用了Web api。如果您手动将web api功能添加到现有mvc项目,请按照this post中提到的步骤执行此操作。
默认情况下,RouteConfig
中的路由注册用于MVC控制器。
答案 1 :(得分:0)
您是否尝试过添加路由前缀?
[RoutePrefix("api/SystemHealt")]
public class SystemHealtController : ApiController
{
[HttpGet]
public IHttpActionResult UpdateUsageDetail(string cpuUsage, string
memoryUsage, string diskUsage)
{
// Do Stuff
return Ok();
}