【发布时间】: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 属性。我已经更新了问题
标签: c# asp.net-web-api asp.net-web-api-routing