路线在邮政人员中工作不正确发布邮件不允许

时间:2018-04-25 15:24:30

标签: c# http asp.net-web-api postman

我正在使用mvc和visual studio创建一个web api但是我正在解决一个问题。我通过本地主机的浏览器而不是浏览器的方式运行这个帖子man的桌面版本。

我调用网址的方式是

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中运行上面的内容时,它给出了以下错误

  

{       “消息”:“请求的资源不支持http方法'POST'。” }

我在同一个问题上尝试了另一个SO,但它没有解决我的问题。

我正在使用第一次创建的web 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 :(得分:0)

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路由器

GlobalConfiguration.Configure(WebApiConfig.Register);