C# 配置路由asp.net webapi

C# 配置路由asp.net webapi,c#,asp.net,asp.net-mvc,angularjs,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Angularjs,Asp.net Web Api,我正在使用asp.net webapi后端构建angularJS应用程序。在我的routeconfig文件中,我有 routes.MapRoute( name: "default", url: "{*url}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 这个很好用。任何被调用的Url都会返回Home/Index视图(我仅有的视图)到应用程

我正在使用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();
    }
}
为什么这不起作用??当试图使用url localhost/api/company/1/10/a通过邮递员调用它时,我发现一个资源找不到错误,其中1=page,10=pageSize,a=term


这可能是一个简单的答案,但对MVC来说是新的,所以仍然需要学习。

1-您使用的是Get方法,这意味着您可以通过Url传递搜索选项,因此您可以创建一个搜索选项对象,如:

public class SearchOptions
{
   public string Term{get; set;}
   public int Page {get; set;}
   public int PageSize {get; set;}
}
然后你可以把你的方法改成这样

public async Task<IHttpActionResult> Get(string term, int page, int pageSize) {
    ...

    return Ok(results);
}
[HttpGet]
[Route("api/blabla/SearchSomething")]
public async Task<IHttpActionResult> Get([FromUri]SearchOptions searchOptions) {
    ...

    return Ok(results);
}

希望对您有所帮助。

如果您正在使用Web API 2,请使用Route属性。谢谢你。我去看看。在您的示例中,您将如何调用该get方法?我不确定fromurl部分是什么?[FromUri]告诉模型绑定器从查询字符串而不是从请求正文构造搜索选项,因此您需要将搜索选项与querystring一起传递。你看得很清楚。谢谢你
[HttpGet]
[Route("api/blabla/SearchSomething")]
public async Task<IHttpActionResult> Get([FromUri]SearchOptions searchOptions) {
    ...

    return Ok(results);
}
api/blabla/SearchSomething?term=somevalue&page=1&pageSize=10