在启用属性路由且没有默认路由的情况下,为什么我的API仍返回旧的默认路由?

时间:2018-08-29 16:58:28

标签: c# asp.net-web-api

注意:我是C#,asp.net和它附带的所有东西的新手。

我已经创建了一个名为Review.cs的类,其中包含一些属性。

我还有一个名为ReviewController.cs的控制器。该控制器的想法是,我应该能够拥有三个不同的组件:

1)GET所有评论 2)GET所有评论,其中siteID =参数 3)GET一则评论

最初,当我去http://localhost:#####/api/Review查找所有评论时,它是可行的,当我附加一个参数时,它也可行。

有人问我另一个问题,建议我阅读Attribute Routing,我在链接上做了。

通过阅读,我的WebApiConfig.cs文件现在看起来像这样:

使用System.Web.Http;

namespace Test_Site_1
{
    public class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            //attribute routing
            config.MapHttpAttributeRoutes();

        }
    }
}

我的ReviewController.cs文件如下:

namespace Test_Site_1.Controllers
{
    public class ReviewController : ApiController
    {
        private ReviewAPIModel db = new ReviewAPIModel();

        [Route("api/Review/all")]
        [HttpGet]
        public IEnumerable<Review> Review()
        {
            return db.Review;
        }

        [Route("api/Review/{siteID}/Reviews")]
        [HttpGet]
        public IEnumerable<Review> FindReviewBySite(int siteID)
        {
            return db.Review.Where(Review => Review.siteID == siteID);
        }

        [ResponseType(typeof(Review))]
        [Route("api/Review/single/{id}")]
        [HttpGet]
        public IHttpActionResult Review_ByID(int id)
        {
            Review review = db.Review.Find(id);
            if (review == null)
            {
                return NotFound();
            }

            return Ok(review);
        }
    }
}

现在,基于我对众多SO问题的理解以及我已经阅读的许多Microsoft指南,我设置的“属性路由”应该如下工作:

http://localhost:#####/api/Review 预期:不再返回任何内容(这是我从WebApiConfig.cs中删除的旧默认设置)。 实际:返回所有评论

http://localhost:#####/api/Review/all

预期:应返回上面默认API返回的内容。

实际:返回错误The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Http.IHttpActionResult Review_ByID(Int32)'

http://localhost:#####/api/Review/1/Reviews

预期:应返回ID = 1的网站的所有评论。

实际:返回错误HTTP Error 404.0 - Not Found The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

http://localhost:#####/api/Review/single/1

期望:应该给我返回ID = 1的评论。

实际:返回错误HTTP Error 404.0 - Not Found The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

我要去哪里错了,或者我想念什么?似乎应该根据指南和我遵循的所有问题正确设置所有内容。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题:MVC Attribute Routing Not Working

它建议我需要将Global.asax.cs文件更新为以下内容:

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebApiConfig.Register); 
    }
}