При включенной атрибутной маршрутизации и отсутствии маршрутизации по умолчанию, почему мой API все еще возвращается по старому маршруту по умолчанию? - PullRequest
0 голосов
/ 29 августа 2018

Примечание: я новичок в 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.

Где я иду не так или чего мне не хватает? Кажется, что все должно быть настроено правильно на основе руководств и ТАКИХ вопросов, которые я соблюдаю.

1 Ответ

0 голосов
/ 30 августа 2018

Я нашел этот вопрос: Маршрутизация атрибута MVC не работает

Было предложено обновить файл Global.asax.cs следующим образом:

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebApiConfig.Register); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...