POST 没有调用预期的方法
Posted
技术标签:
【中文标题】POST 没有调用预期的方法【英文标题】:POST doesn't call the expected method 【发布时间】:2020-05-03 10:41:51 【问题描述】:我正在使用两个或多个 Post 方法开发 ASP.Net Web API。我正在尝试通过 HttpClient 从 api 控制器使用其中一个 Post 方法,但每次调用第一个 Post 方法。 下面是代码
public class JobController : ApiController
[HttpPost]
public HttpResponseMessage RunJob([FromBody]UserModel User)
[HttpPost]
public HttpResponseMessage DownloadFile(string ExportStatusGuid, string PartnerGuid, string UserEmail, string Password)
而我试图通过 HTTP 客户端使用它是:
using (var client = new HttpClient())
var arguments = new ExportStatusGuid, PartnerGuid ;
HttpContent content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(arguments), Encoding.UTF8, "application/json");
var responseTask = client.PostAsync(ApiUrl + "Job/DownloadFile", content);
responseTask.Wait();
if (responseTask.Result.IsSuccessStatusCode)
你可以看到我已经从 JobController 调用了 DownloadFile
var responseTask = client.PostAsync(ApiUrl + "Job/DownloadFile", content);
但不是调用 Job/DownloadFile,而是运行 Job/RunJob 方法。即使我尝试添加路由配置,我也无法找出问题所在。
默认路由配置在这里
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
);
请帮助我解决这个问题。
【问题讨论】:
这与HttpClient无关。您的控制器将RunJob
公开为 default 发布操作,因为它是唯一具有 [HttpPost]
属性的方法。 DownloadFile
只是一种方法
将 PostAsync 更改为 GetAsync
@Shiljo 问题是如何POST,而不是如何GET。无论如何,此控制器中没有 GET 操作
如果你想把DownloadFile
变成一个动作,添加HttpPost
属性到它
对不起,在复制代码时,我错过了 HttpPost,在应用程序中,两种方法都有 HttpPost 属性。我已经更新了问题
【参考方案1】:
更改路由配置
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/action/id",
defaults: new id = RouteParameter.Optional
);
【讨论】:
@azharrahi 你需要在路由中添加动作名称以上是关于POST 没有调用预期的方法的主要内容,如果未能解决你的问题,请参考以下文章
Angular2 http post没有将json对象传递给MVC 6控制器动作
从计算机 visio 调用 ocr api 时,我没有得到预期的结果