Web API路由理解
Web API路由理解
我创建了一个名为WebPortalController的新控制器,但是当我调用它或尝试通过浏览器调用它时,无法访问下面的方法,只显示资源未找到的错误。我是否需要在RoutesConfig.cs代码中添加新的路由?如果是,应该如何添加?
命名空间WebApi.Controllers
{
public class WebPortalController : ApiController
{
// GET api/webportal
private WebPortEnterpriseManagementDa _da = new WebPortEnterpriseManagementDa();
public ManagedType Get(string name)
{
ManagedType items = _da.GetManagedType(name);
return items;
}
// POST api/webportal
public void Post([FromBody]string value)
{
}
// PUT api/webportal/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/webportal/5
public void Delete(int id)
{
}
}
}
路由文件
命名空间WebApi
{
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 = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
问题出现的原因是配置文件中的路由设置错误,导致无法正确调用API的Get方法。解决方法是在App_Start/WebApiConfig文件中设置默认的API路由,并将Get方法中的参数名改为与路由参数相匹配。
首先,需要在App_Start/WebApiConfig文件中设置默认的API路由,代码如下:
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
然后,需要将Get方法中的参数名改为与路由参数相匹配,代码如下:
public ManagedType Get(string id) { ManagedType items = _da.GetManagedType(name); return items; }
这样,就可以通过浏览器调用Get方法了,例如:
localhost:55304/api/WebPortal/Test
如果要测试Post/Put/Delete方法,可以使用Fiddler或浏览器插件Postman。