【发布时间】:2014-11-13 06:05:13
【问题描述】:
我正在构建一个带有 asp.net webapi 后端的 angularJS 应用程序。在我的 routeconfig 文件中,我有这个
routes.MapRoute(
name: "default",
url: "{*url}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这很好用。任何被调用的 Url 都会将 Home/Index 视图(我拥有的唯一视图)返回给应用程序,并且 angularJS 会计算出是否存在查询字符串并计算出要显示的状态。
我的 WebApi 中有基本的 Get、Put、Post 和 Delete 方法,我可以很好地调用它们。例子是
public class CompanyController : ApiController
{
private CompanyService _service;
public CompanyController(CompanyService service)
{
_service = service;
}
public async Task<IHttpActionResult> Get()
{
...
return Ok(model);
}
public async Task<IHttpActionResult> Get(int id)
{
...
return Ok(model);
}
public async Task<IHttpActionResult> Post(CompanyModel model)
{
...
return Ok();
}
public async Task<IHttpActionResult> Put(Company model)
{
...
return Ok();
}
public async Task<IHttpActionResult> Delete(CompanyModel model)
{
...
return Ok();
}
}
现在我想在我的 api 中添加另一种方法,用户可以在其中加载公司,但也可以传入一个术语来搜索(字符串)、pageSize(int)和页码(int)。像这样的
public async Task<IHttpActionResult> Get(string term, int page, int pageSize) {
...
return Ok(results);
}
现在我知道我需要添加另一条路线,以确保可以调用此方法。好的,所以我将它添加到我的 RouteConfig 中。
// search
routes.MapRoute(
name: "search",
url: "api/{controller}/{page}/{pageSize}/{term}",
defaults: new { page = @"\d+", pageSize = @"\d+", term = UrlParameter.Optional }
);
为什么这不起作用?当我尝试通过邮递员使用 url localhost/api/company/1/10/a 调用它时遇到资源找不到错误,其中 1 = page,10 = pageSize 和 a = term
这可能是一个简单的答案,但对 MVC 来说是新手,所以仍在学习。
【问题讨论】:
-
如果您使用的是 Web API 2,请使用路由属性。asp.net/web-api/overview/web-api-routing-and-actions/…
标签: c# asp.net asp.net-mvc angularjs asp.net-web-api