Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 过帐文件时请求错误(400)_C#_Asp.net Web Api_Asp.net Core_Postman - Fatal编程技术网

C# 过帐文件时请求错误(400)

C# 过帐文件时请求错误(400),c#,asp.net-web-api,asp.net-core,postman,C#,Asp.net Web Api,Asp.net Core,Postman,我有一个.NET Core API项目,它有一个简单的端点来上载文件: [Route("api/[controller]")] [ApiController] public class FilesController : Controller { private IFilesService _filesService { get; set; } public FilesController(IFilesService filesService) {

我有一个.NET Core API项目,它有一个简单的端点来上载文件:

[Route("api/[controller]")]
[ApiController]
public class FilesController : Controller
{
    private IFilesService _filesService { get; set; }

    public FilesController(IFilesService filesService)
    {
        _filesService = filesService;
    }

    [HttpPost]
    public async Task<IActionResult> UploadFile(IFormFile file)
    {
        var model = await _filesService.UploadFile(file);
        return Ok();
    }
}
[路由(“api/[控制器]”)]
[ApiController]
公共类FileController:控制器
{
私有IFilesService_filesService{get;set;}
公共文件控制器(IFilesService文件服务)
{
_filesService=filesService;
}
[HttpPost]
公共异步任务上载文件(IFormFile)
{
var model=await\u filesService.UploadFile(文件);
返回Ok();
}
}
我曾尝试使用Postman来测试这一点,但每次我将文件发布到端点时,都会收到400个错误请求。我的端点从未被击中

我还有其他几个POST端点工作得很好,所以这个特定端点或Postman都有问题。以下是我在Postman中的设置:

我一直在旋转我的轮子,试图找出问题是什么,但这根本没有什么,我下面的例子我在网上看到的


我做错了什么?

在Postman客户端中尝试下面的url

  http://localhost:5001/api/Files/UploadFile
试试这个

[HttpPost]
    public async Task<IActionResult> UploadFile([FromForm]IFormFile file)
    {
        var model = await _filesService.UploadFile(file);
        return Ok();
    }
[HttpPost]
公共异步任务上载文件([FromForm]ifformfile)
{
var model=await\u filesService.UploadFile(文件);
返回Ok();
}

并删除ApiController属性

我看到您已经设置了
[ApiController]
属性,所以我假设您正在运行ASP.Net Core 2.1

如果尚未设置,请尝试将
services.AddMvc()
修改为
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version\u 2\u 1)在Startup.cs中

不久前我也遇到过类似的问题,上面的更改为我解决了这个问题。我找到了问题的答案


希望这有帮助

我在尝试通过AJAX而不是Form.Submit发布FormFile时遇到了同样的问题,但在任何在线位置都找不到完整的解决方案。我将在这里发布我的解决方案,以防其他人偶然发现

我的问题是控制器上的[AutoValidateAntiForgeryToken]属性,就像Cole W在评论中提到的那样。这似乎与Steven最初面临的问题不同,但显然
@Html.AntiForgeryToken()
将使用令牌创建一个隐藏的表单字段\uu RequestVerificationToken,以便在提交时发布。但是,当您尝试手动发布表单时,这并没有完成,您必须自己添加此字段。对我来说,客户端代码最终是这样的:

        const formData = new FormData();
        formData.append('file', file);
        formData.append(
            '__RequestVerificationToken',
            $('input[name=__RequestVerificationToken]').val());

        $.ajax({
            cache: false,
            type: 'POST',
            url: 'somePostUrl',
            data: formData,
            contentType: false,
            processData: false
        });
邮递员将相当于一个额外的密钥/值对,尽管需要找到一种方法来获取实际的令牌。出于测试目的,如果由于[AutoValidateAntiForgeryToken]属性位于基类中而无法简单删除该属性,则可以将[IgnoreAntiforgeryToken]添加到当前控制器或端点方法


希望这在将来能让人省去一些头痛!我在这方面浪费了不少时间…

这给了我一个404未找到,我正在发布到正确的URL您是否尝试使用asp.net web表单/视图?这实际上允许我访问端点。现在唯一的问题是
文件
为空。但这比我以前拥有的要好。哇,太谢谢你了,我从来没有找到过。是的,我浪费了一整天的时间才找到。很高兴我能帮忙。:)我的问题与控制器方法上的
[ValidateAntiForgeryToken]
属性有关。出于测试目的,我移除了它,它开始工作。