C# 在启用了属性路由且没有默认路由的情况下,为什么我的API仍然返回旧的默认路由?
注意:我不熟悉C#、asp.net以及所有与之相关的东西 我创建了一个名为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
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页面时,同样的端口信息也适用于我。