Маршруты не работают правильно в сообщении человек дает сообщение не допускается - PullRequest
0 голосов
/ 25 апреля 2018

Я создаю веб-API с использованием MVC и Visual Studio, однако я сталкиваюсь с проблемой.Я использую это для настольной версии почтового администратора, а не через браузер через локальный хост.

То, как я вызываю URL-адрес:

http://localhost:12513/api/CustomerContracts/AddCustomer

[System.Web.Http.HttpPost]
[System.Web.Http.Route("AddCustomer/{description}/{customerRef}/{contractTypeId}/{startDate}/{EndDate}")]

public async Task AddCustomer(string Description, string CustomerRef, int ContractTypeId, DateTime startDate, DateTime endDate)
{
        CustomerContracts _newContact = new CustomerContracts();

        try
        {
            _newContact.Description = Description;
            _newContact.CustomerRef = CustomerRef;
            _newContact.ContractTypeId = ContractTypeId;
            _newContact.StartDate = startDate;
            _newContact.EndDate = endDate;
            db.Entry(_newContact).State = EntityState.Modified;

            db.CustomerContract.Add(_newContact);
            await db.SaveChangesAsync();
        }
        catch (Exception x)
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent(x.Message) });


        }           

 }

Когда я запускаю вышеупомянутое в post man, он выдает мне сообщение об ошибке:

{"Message": "Запрошенный ресурс не поддерживает http-метод" POST "."}

Я попробовал другой SO по тому же вопросу, но это не решает мою проблему здесь.

Я использую файл маршрута по умолчанию, который находится в проекте веб-API, когда он созданв первый раз.

 public static void RegisterRoutes(RouteCollection routes)
 {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
 }

Редактировать 2

Я сделал следующие предложения и тот же результат сообщения об ошибке в почтальоне.

 [System.Web.Http.HttpPost]


[System.Web.Http.Route("AddCustomer/{Description}/
{CustomerRef}/{ContractTypeId}/{startDate}/{endDate}")]

public async Task AddCustomer(string Description, string CustomerRef, int ContractTypeId, DateTime startDate, DateTime endDate)
    {



        CustomerContracts _newContact = new CustomerContracts();

        try
        {
            _newContact.Description = Description;
            _newContact.CustomerRef = CustomerRef;
            _newContact.ContractTypeId = ContractTypeId;
            _newContact.StartDate = startDate;
            _newContact.EndDate = endDate;
            db.Entry(_newContact).State = EntityState.Modified;

            db.CustomerContract.Add(_newContact);
            await db.SaveChangesAsync();
        }
        catch (Exception x)
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent(x.Message) });


        }



    }

1 Ответ

0 голосов
/ 25 апреля 2018

routing attributes должно быть точно таким же, как вы написали список имен parameters.

Поэтому вместо:

[System.Web.Http.Route("AddCustomer/{description}/{customerRef}/{contractTypeId}/{startDate}/{EndDate}")]

Это должно быть

[System.Web.Http.Route("AddCustomer/{Description}/{CustomerRef}/{ContractTypeId}/{startDate}/{endDate}")]

Обратите внимание, как я изменил атрибуты пути, чтобы они соответствовали приведенному ниже списку параметров.

public async Task AddCustomer(string Description, string CustomerRef, int ContractTypeId, DateTime startDate, DateTime endDate)
{


 }

Второе: вам нужно добавить WebApiConfig.cs в App_Start

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

Затем: В файле Global.asax в методе Application_Start добавьте следующую строку для регистрации WebApi Router

GlobalConfiguration.Configure(WebApiConfig.Register);
...