C S*_*per 3 .net c# asp.net-web-api
我可以有 2 个具有不同数据类型的 post 方法,如下所示:-
[HttpPost]
public HttpResponseMessage Post([StringBody]string data)
{
// Logic
}
[HttpPost]
public HttpResponseMessage Post(Requirements objRequirement)
{
//Logic
}
Run Code Online (Sandbox Code Playgroud)
我在邮递员中遇到以下错误:-
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>Multiple actions were found that match the request:
System.Net.Http.HttpResponseMessage Post(Newtonsoft.Json.Linq.JObject) on type ATL.Trebuchet.RestApi.Controllers.ValuesController
System.Net.Http.HttpResponseMessage Post(ATL.Trebuchet.RestApi.Models.Requirements) on type ATL.Trebuchet.RestApi.Controllers.ValuesController</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace> at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)
at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)
at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)</StackTrace>
</Error>
Run Code Online (Sandbox Code Playgroud)
请帮助如何使用不同类型的参数使用相同的 Post 方法
我正在发送数据作为 Text (text/plain)
编辑 1:
如果你想在同一个控制器中使用多个 post 方法,你需要将它们映射到不同的路由或操作
对于Web api 1
将路由添加到 WebApiConfig,您可以查看此答案以获取详细信息,但重要的是指定默认路由 api/controller/id 仅接受整数。否则,这些操作将被视为字符串 ID。
routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // Only integers
);
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}"
);
Run Code Online (Sandbox Code Playgroud)
然后在控制器中指定方法之上的操作
public class DataController : ApiController
{
[HttpPost]
[ActionName("post1")]
public HttpResponseMessage Post([StringBody]string data)
{
// Logic
}
[HttpPost]
[ActionName("post2")]
public HttpResponseMessage Post(Requirements objRequirement)
{
//Logic
}
}
Run Code Online (Sandbox Code Playgroud)
对于Web api 2
在这里你可以使用属性路由
[RoutePrefix("api/data")]
public class DataController : ApiController
{
[HttpPost]
[Route("post1")]
public HttpResponseMessage Post([StringBody]string data)
{
// Logic
}
[HttpPost]
[Route("post2")]
public HttpResponseMessage Post(Requirements objRequirement)
{
//Logic
}
}
Run Code Online (Sandbox Code Playgroud)
第一个 post 方法将被称为 api/data/post1 和第二个 api/data/post2
| 归档时间: |
|
| 查看次数: |
7126 次 |
| 最近记录: |