【发布时间】:2021-10-11 18:05:06
【问题描述】:
摘要:
我有一个 Asp.net MVC 项目和一个控制台窗口应用程序。
我尝试让控制台应用程序通过控制器中的 [HttpPost] 方法将文件发布到 Web 项目。
我的两个项目都在本地运行,每个项目都在自己的 Visual Studio 实例中。
我的问题是我的 [httppost] 方法从未被调用过。
详情:
这是web项目中的代码
public class DevController : Controller
{
[HttpPost]
public ActionResult UploadStuff(HttpPostedFileBase file)
{
System.Diagnostics.Debugger.Break(); //This breakpoint is never reached
return View();
}
}
这是控制台应用程序中的代码:
static public async void UploadStuff(Stream streamToUploadToWebProject)
{
var content = new MultipartFormDataContent();
content.Add(new StreamContent(streamToUploadToWebProject), "WhateverName");
var httpClient = new HttpClient();
string url = @"http://localhost:12345/dev/UploadStuff";
var response = await httpClient.PostAsync(url, content);
}
注意事项:
1) http://localhost:12345/ :这是我运行 Web 项目时在浏览器中显示的 url。
2) 发送的文件是非结构化 blob。
3)我发现的大多数相关帖子都是关于上传 json 文件(如这篇文章),或者是关于从网页发布文件(在这种情况下,还有一个“Get”方法返回一个包含“上传”的视图)按钮);这两种情况都和我的不一样。
4) [编辑] HttpClient.PostAsync 返回“404”错误。
我的问题:
我做错了什么;我应该如何编写 [HttpPost] 方法,以便它被调用?
【问题讨论】:
-
你有什么错误?
-
另外你设置的路由是什么?默认路由?
-
您的
UploadStuff方法是async void。那很糟!请参阅 Async Await Best Practices by Stephen Cleary 和 8 Async Await Mistakes You Should Avoid in .NET by Nick Chapsas。要修复它,请将其更改为返回 Task,然后确保调用它的方法等待它,以及调用标记为 Async 并返回 Task 或 Task等的方法,一直到调用堆栈. -
@Serge 我没有任何错误;问题是,当我运行向网站“发布”的控制台应用程序时,我的方法永远不会被调用。查看控制器方法中的断点,没有到达(我运行我的网站附带调试器)
-
@ErmiyaEskandary 没有特定的路由。为了确认这不是路由问题,我在 UploadStuff 旁边创建了一个简单的“Get”方法;使用相同类型的路线时,它可以从我的控制台应用程序中很好地调用。
标签: c# asp.net asp.net-mvc http-post