配置路由asp.net webapi
本文关键字:webapi net asp 路由 配置 | 更新日期: 2023-09-27 18:30:10
我正在用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方法,我可以称它们为fine。例如
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 }
);
为什么不起作用??当我试图通过邮递员使用URLlocalhost/api/company/1/10/a调用资源时,我遇到了一个找不到资源的错误,其中1=页面,10=pageSize和a=术语
这可能是一个简单的答案,但MVC还是个新手,所以仍在学习中。
1-您使用的是Get方法,这意味着您可以通过Url传递搜索选项,因此您可以创建一个搜索选项对象,如:
public class SearchOptions
{
public string Term{get; set;}
public int Page {get; set;}
public int PageSize {get; set;}
}
然后你可以改变你的方法,像这个
[HttpGet]
[Route("api/blabla/SearchSomething")]
public async Task<IHttpActionResult> Get([FromUri]SearchOptions searchOptions) {
...
return Ok(results);
}
注意我装饰方法的Route属性,您可以对方法参数使用不同的约束,看看这个。
最后,您可以从客户端调用方法,如
api/blabla/SearchSomething?term=somevalue&page=1&pageSize=10
希望能有所帮助。