amir.nazarizadeh Ответов: 1

Тест web api 2 MVC 5 в postman


всем привет
Я новичок в веб asp.net АПИ 2
Я создал api для своих контроллеров/api и заполнил его следующим (1*)
Я хочу протестировать api с postman на chrome
но это дает мне ошибку 404
это мой webapconfig (2*)
и это url-адрес, который я использовал для postman : localhost:2383 / api/products
а это ошибка на почтальоне(3*)
помоги мне, если сможешь
спасибо.

Что я уже пробовал:

1*

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Mvc;
using My_World.Models;

namespace My_World.Controllers.Api
{
    public class ProductsController : ApiController
    {
        Product[] products = new Product[] 
        { 
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
        };

        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }

        
        public IHttpActionResult GetProduct(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
    }
}


2*
<using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace My_World
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

3*
[HttpException]: Контроллер для пути '/ api/products' не найден или не реализует IController.
в System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, тип controllerType)
в System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
в System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase httpContext, IController & amp; controller, IControllerFactory& factory)
в System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, asynccallback callback, состояние объекта)
в System.Web.Mvc.MvcHandler.BeginProcessRequest(свойство HttpContext объект HttpContext, объект asynccallback обратного вызова, состояние объекта)
в System.Web.Mvc.MvcHandler.Системы.Веб.IHttpAsyncHandler.BeginProcessRequest(свойство HttpContext контекст, объект asynccallback КБ, объекта дополнительные данные [extradata])
в System.Web.HttpApplication.CallHandlerExecutionStep.Системы.Веб.Класса HttpApplication.IExecutionStep.Выполнять()
в System.Web.HttpApplication.ExecuteStep (iexecutionstep step, Boolean& completedSynchronously)

Richard Deeming

Вы не забыли обновить свой Application_Start в Global.asax.cs вызвать регистрационный код API?

GlobalConfiguration.Configure(WebApiConfig.Register);

1 Ответов

Рейтинг:
2

David_Wimbley

Ваш URL-адрес, который вы используете для доступа к вашему веб-api, неверен.

Ваша ошибка говорит о том, что вы использовали /api/products. С помощью Web API я считаю, что если вы не укажете свое действие в своем контроллере api как GET, вы должны использовать имя действия в своем URL-адресе.

В вашем случае, URL-адрес, вы должны использовать /по API/продукты/GetAllProducts или /по API/продукты/GetProduct/1 несколько вариантов url.

Если бы вы это сделали

public IEnumerable<Product> Get()
        {
            return products;
        }


Затем вы могли бы сделать API или продукты и если ты

public IEnumerable<Product> Get(int id)
        {
            return products.Where(m=>m.Id == id);
        }


Вы можете использовать /api / products/1.

Другой вариант-использовать маршруты для переименования ваших URL-адресов в те, которые вы хотите. Вы можете объявить эти маршруты с помощью атрибутов или в файле RouteConfig.cs.