Asp.net 未在webapi中解决Get方法冲突
MoviesController中的webapi get方法是Asp.net 未在webapi中解决Get方法冲突,asp.net,asp.net-mvc,rest,asp.net-web-api,Asp.net,Asp.net Mvc,Rest,Asp.net Web Api,MoviesController中的webapi get方法是 // GET api/movies /// <summary> /// Returns the sorted list of movies /// </summary> /// <returns>Collection of Movies</returns> public IEnumerable<Mov
// GET api/movies
/// <summary>
/// Returns the sorted list of movies
/// </summary>
/// <returns>Collection of Movies</returns>
public IEnumerable<Movie> Get()
{
return repository.GetMovies().OrderBy(c => c.Title);
}
/// <summary>
/// Returns an individual movie
/// </summary>
public Movie Get(int movieId)
{
var movie = repository.GetMovieById(movieId);
if (movie == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return movie;
}
我面临的问题是每次调用Get()时都会遇到。不会调用Id为的Get方法。我尝试了各种解决方案,但都不适用于我。再制作一条自定义路线,如图所示:
config.Routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "api/{controller}/{action}/{movieId}",
defaults: new { movieId = "0" } //instead of default movieid '0' you can specify as per your requirement.
);
,然后只调用id为的Get。我通常调用Get w/o参数GetAll,在我看来,这实际上是一个更好的名称,因为它反映了该方法的实际操作。我个人尽量避免弄乱路由,除非我真的必须这样做。@mmeasor..如果自定义路由是以正确的方式创建的,那么默认路由将不会产生任何问题。将默认值设置为零将导致异常,我已经完成了这个config.routes.maphttroute(名称:“DefaultApiWithMovieId”,routeTemplate:“api/{controller}/{action}/{movieId}”,默认值:new{movieId=RouteParameter.Optional});config.Routes.maphttroute(名称:“DefaultApi”,routeTemplate:“api/{controller}/{id}”,默认值:new{id=RouteParameter.Optional});@little..我认为异常是由
Get
方法而不是路由引发的。您如何使用id调用方法?发布一个示例URL?我得到了答案,方法参数名称是movieId,在webapiconfig中它是唯一的id。我已经使用movieId更改了id,并像routetemplate那样更新了routetemplate:“api/{controller}/{action}/{movieId}”,只需将您的答案与我的答案路由模板进行比较。每当您使用相同的url调用任何其他方法时,您都必须将参数名称指定为movieid。是的,我同意Mairaj。与其弄乱默认路由,不如创建一个自定义路由,如我的答案所示。
config.Routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "api/{controller}/{action}/{movieId}",
defaults: new { movieId = "0" } //instead of default movieid '0' you can specify as per your requirement.
);