注意:我是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.
我要去哪里错了,或者我想念什么?似乎应该根据指南和我遵循的所有问题正确设置所有内容。
答案 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);
}
}