Примечание: я новичок в 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: ##### / апи / Обзор
Ожидаемый: больше не должен ничего возвращать (это старое значение по умолчанию, которое я удалил из WebApiConfig.cs
).
Актуально: возвращает все отзывы
http://localhost: ##### / api / Review / all
Ожидается: должен возвращать то, что было возвращено API по умолчанию выше.
Actual: возвращает ошибку 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
Ожидается: должны возвращаться все отзывы для сайта с идентификатором = 1.
Actual: возвращает ошибку 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.
Actual: возвращает ошибку HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Где я иду не так или чего мне не хватает? Кажется, что все должно быть настроено правильно на основе руководств и ТАКИХ вопросов, которые я соблюдаю.