Web API路由理解

26 浏览
0 Comments

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 }

);

}

}

}

0
0 Comments

问题出现的原因是配置文件中的路由设置错误,导致无法正确调用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。

0