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

C# 在启用了属性路由且没有默认路由的情况下,为什么我的API仍然返回旧的默认路由?,c#,asp.net-web-api,C#,Asp.net Web Api,注意:我不熟悉C#、asp.net以及所有与之相关的东西 我创建了一个名为Review.cs的类,其中包含一些属性 我还有一个名为ReviewController.cs的控制器。这个控制器背后的想法是我应该能够有三个不同的组件: 1) 获取所有评论 2) GET所有评论,其中siteID=一个参数 3) GETone review 最初,当我去查找所有评论时,它起作用了,当我添加一个参数时,它也起作用了 有人在我问的另一个问题上建议我读一下,我在链接上读了 经过阅读,我的WebApiConfig

注意:我不熟悉C#、asp.net以及所有与之相关的东西

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

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

1)
获取所有评论
2) 
GET
所有评论,其中
siteID
=一个参数 3)
GET
one review

最初,当我去查找所有评论时,它起作用了,当我添加一个参数时,它也起作用了

有人在我问的另一个问题上建议我读一下,我在链接上读了

经过阅读,我的WebApiConfig.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);
        }
    }
}
使用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);
        }
    }
}
名称空间测试\u站点\u 1.0
{
公共类审阅控制器:ApiController
{
private ReviewAPIModel db=新ReviewAPIModel();
[路线(“api/Review/all”)]
[HttpGet]
公共IEnumerable Review()
{
返回db.Review;
}
[路由(“api/Review/{siteID}/Reviews”)]
[HttpGet]
公共IEnumerable FindReviewBySite(int siteID)
{
返回db.Review.Where(Review=>Review.siteID==siteID);
}
[响应类型(类型(审查))]
[路由(“api/Review/single/{id}”)]
[HttpGet]
公共IHttpActionResult Review_ByID(内部id)
{
Review Review=db.Review.Find(id);
if(review==null)
{
返回NotFound();
}
返回Ok(审核);
}
}
}
现在,根据我对众多SO问题的理解和我所阅读的众多Microsoft指南,我所设置的属性路径应该如下所示:

预期:不再返回任何内容(这是我从
WebApiConfig.cs
中删除的旧默认值)。 实际:返回所有评论

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

实际值:返回错误
参数字典包含方法'System.Web.Http.IHttpActionResult Review_ByID(Int32)'的不可空类型'System.Int32'的参数'id'的空条目

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

实际:返回错误
HTTP错误404.0-未找到
您正在查找的资源已被删除、名称已更改或暂时不可用。

预期:应将ID为1的审阅返回给我

实际:返回错误
HTTP错误404.0-未找到
您正在查找的资源已被删除、名称已更改或暂时不可用。

我哪里做错了,或者我错过了什么?似乎所有的事情都应该根据指南来安排,所以我就跟着提问

我发现了这个问题:

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

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

这看起来是一个正确的设置。Dubble检查端口,重建,甚至尝试使用相同的设置创建新项目,查看其输出是否相同您的意思是确保端口正常工作吗?当我有一个generic.aspx页面时,同样的端口信息也适用于我。