我正在使用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) });
}
}
答案 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);