gpt4 book ai didi

asp.net - 表单键或值长度限制 2048 超出

转载 作者:行者123 更新时间:2023-12-04 13:13:02 25 4
gpt4 key购买 nike

我正在使用 asp.net 核心来构建 API。我有一个请求,允许用户使用此代码上传个人资料图片

 [HttpPost("{company_id}/updateLogo")]
public async Task<IActionResult> updateCompanyLogo(IFormFile imgfile,int company_id)
{
string imageName;
// upload file
if (imgfile == null || imgfile.Length == 0)
imageName = "default-logo.jpg";
else
{
imageName = Guid.NewGuid() + imgfile.FileName;
var path = _hostingEnvironment.WebRootPath + $@"\Imgs\{imageName}";
if (imgfile.ContentType.ToLower().Contains("image"))
{
using (var fileStream = new FileStream(path, FileMode.Create))
{
await imgfile.CopyToAsync(fileStream);
}
}
}
.
.

但它不断返回此异常: Form key or value length limit 2048 exceeded 请求
http://i.imgur.com/25B0qkD.png

更新:
我已经尝试过这段代码,但它不起作用
    services.Configure<FormOptions>(options =>
{
options.ValueLengthLimit = int.MaxValue; //not recommended value
options.MultipartBodyLengthLimit = long.MaxValue; //not recommended value
});

最佳答案

默认情况下,ASP.NET Core 在 FormReader 内强制执行 2048 的键/值长度限制。作为常数并应用于 FormOptions 如下所示:

public class FormReader : IDisposable
{
public const int DefaultValueCountLimit = 1024;
public const int DefaultKeyLengthLimit = 1024 * 2; // 2048
public const int DefaultValueLengthLimit = 1024 * 1024 * 4; // 4194304
// other stuff
}

public class FormOptions
{
// other stuff
public int ValueCountLimit { get; set; } = DefaultValueCountLimit;
public int KeyLengthLimit { get; set; } = FormReader.DefaultKeyLengthLimit;
public int ValueLengthLimit { get; set; } = DefaultValueLengthLimit;
// other stuff
}

因此,您可以使用 KeyValueLimit 创建自定义属性来显式设置您自己的键/值长度限制。和 ValueCountLimit属性(还有 ValueLengthLimit 等):
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class RequestSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
{
private readonly FormOptions _formOptions;

public RequestSizeLimitAttribute(int valueCountLimit)
{
_formOptions = new FormOptions()
{
// tip: you can use different arguments to set each properties instead of single argument
KeyLengthLimit = valueCountLimit,
ValueCountLimit = valueCountLimit,
ValueLengthLimit = valueCountLimit

// uncomment this line below if you want to set multipart body limit too
// MultipartBodyLengthLimit = valueCountLimit
};
}

public int Order { get; set; }

// taken from /a/38396065
public void OnAuthorization(AuthorizationFilterContext context)
{
var contextFeatures = context.HttpContext.Features;
var formFeature = contextFeatures.Get<IFormFeature>();

if (formFeature == null || formFeature.Form == null)
{
// Setting length limit when the form request is not yet being read
contextFeatures.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions));
}
}
}

Action 方法中的使用示例:
[HttpPost("{company_id}/updateLogo")]
[RequestSizeLimit(valueCountLimit: 2147483648)] // e.g. 2 GB request limit
public async Task<IActionResult> updateCompanyLogo(IFormFile imgfile, int company_id)
{
// contents removed for brevity
}

注意:如果使用的是最新版本的 ASP.NET Core,请更改名为 ValueCountLimit 的属性至 KeyCountLimit .

更新: Order属性必须包含在属性类中,因为它是已实现接口(interface) IOrderedFilter 的成员.

类似问题:

Form submit resulting in "InvalidDataException: Form value count limit 1024 exceeded."

Request.Form throws exception

关于asp.net - 表单键或值长度限制 2048 超出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com