【问题标题】:HttpPost method can't be reached, in ASP.Net MVC Project在 ASP.Net MVC 项目中无法访问 HttpPost 方法
【发布时间】: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 Cleary8 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


【解决方案1】:

在您的控制器中尝试在参数之前使用 [FromBody] 属性。

[HttpPost]  
public ActionResult UploadStuff([FromBody]HttpPostedFileBase file)

【讨论】:

  • 我试过了,但不幸的是结果一样。
猜你喜欢
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多