我正在使用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 }
);
为什么这不起作用?当我尝试通过postman使用url localhost / api / company / 1/10 / a调用它时,我找到了一个资源无法找到错误,其中1 = page,10 = pageSize和a = term
它可能是一个简单的答案,但对于MVC来说还是新手,所以还在学习。
答案 0 :(得分:1)
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属性,你可以对方法参数使用不同的约束,看看this。
最后,您可以像这样从客户端调用该方法
api/blabla/SearchSomething?term=somevalue&page=1&pageSize=10
希望有所帮助。