日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何在ASP.NetCore增加文件上传大小

發(fā)布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在ASP.NetCore增加文件上传大小 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關注架構師高級俱樂部

開啟架構之路

不定期福利發(fā)放哦~

架構師高級俱樂部

讀完需要

7

分鐘

速讀僅需 3 分鐘

/ 如何在核心中增加文件 ASP.NET 大小 /

從ASP.NET 2.0開始最大請求正文大小限制為30MB (+28.6 MiB)。在正常情況下,無需增加 HTTP 請求 body 的大小。但是,當您嘗試上傳大型文件 (> 30MB) 時,需要增加默認允許的最大限制。在這篇簡短的文章中,我們將了解如何在.netcore 應用程序中增加文件 ASP.NET 大小以及控制此限制的各種選項。

1

? ?

在核心中增加文件 ASP.NET 大小

正如我們所知 ASP.NET 是獨立于平臺的,因此您可以在 Windows、Linux 或 Mac 平臺上托管它們。換句話說,您可以在 IIS、Ngnix 和 Apache Web 服務器上托管應用程序。Kestrel 是用于 asp.netcore 的跨平臺的服務器,默認情況下包含在 netcore ASP.NET 中。Kestrel 可用作獨立服務器或被其他服務器反向代理,如 IIS、Nginx 或 Apache。沒有單一的解決方案可以覆蓋所有的部署選項來增加請求大小限制。根據(jù)不同的部署選項,解決方案也不盡相同。我們可能有以下部署選項。

1、托管在 IIS 上(有凱斯特雷爾或沒有凱斯特雷爾)

2、托管在 Kestrel 上(作為獨立或與 Ngnix 和 Apache 服務器一起托管)

2

? ?

在 IIS 上

還能記得在 ASP.NET 中,我們曾經(jīng)在 web.config 文件中通過設置增加 4MB 的默認限制。就像 maxRequestLength 節(jié)點

<configuration><system.web><httpRuntime maxRequestLength="xxx" /></system.web> </configuration>

同樣對于 ASP.NetCore 應用程序我們可以通過在文件設置中設置屬性來增加默認的 30MB 的限制。默認的 ASP。NET Core 應用模板沒有創(chuàng)建此文件。它在發(fā)布應用程序時創(chuàng)建。但是,您也可以使用以下代碼將其手工添加(如果沒有)到應用程序的根目錄maxAllowedContentLengthweb.configweb.config

`<?xml version="1.0" encoding="utf-8"?> `<?xml version="1.0" encoding="utf-8"?> <configuration><!-- To customize the asp.net core module uncomment and edit the following p. For more info see https://go.microsoft.com/fwlink/?linkid=838655 --><system.webServer><handlers><remove name="aspNetCore"/><add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/></handlers><aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /><security><requestFiltering><!-- This will handle requests up to 50MB --><requestLimits maxAllowedContentLength="52428800" /></requestFiltering></security></system.webServer> </configuration>

您需要在 security 部分中進行定義。更多詳情可百度maxAllowedContentLengthweb.config為了在 IIS 和 Kestrel 服務器之間創(chuàng)建反向代理,web.config 文件必須出現(xiàn)在已部署應用程序的內(nèi)容根路徑(通常是應用程序 basepath)。這是提供給 IIS 的網(wǎng)站物理路徑的相同位置。此設置僅適用于 IIS。

3

? ?

托管在 Kestrel 上

從 ASP.NET Core 2.0 開始, Kestrel 服務器也強加了自己的默認限制。有 3 種不同的方法可以增加這個默認限制。

3.1

? ?

MVC 解決方案

如果你想改動一個特定的 MVC 接口或控制器的最大請求體大小限制,你可以使用屬性。比如 RequestSizeLimit

[HttpPost][RequestSizeLimit(40000000)] public async Task<IActionResult> UploadFiles(IFormFile file){ //TODO: Save file }

該 RequestSizeLimit 操作方法設置允許的最大請求長度。您可以在方法級別或控制器級別應用此屬性。這是 ASP.netcore 應用中增加請求體最大限制的推薦方法。還有另一個適用于控制器級別或方法級別的屬性來禁用 HTTP 請求的大小限制。這將把請求限制設置為無限制。比如, ableRequestSizeLimit

[HttpPost] [DisableRequestSizeLimit] public async Task<IActionResult> UploadFiles(IFormFile file){ //TODO: Save file }

3.2

? ?

全局方案

要修改全局最大請求 body 大小,請為 Kestrel 設置選項。比如,MaxRequestBodySize

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>?WebHost.CreateDefaultBuilder(args).UseStartup<Startup>() .UseKestrel(options?=>? {?options.Limits.MaxRequestBodySize?=?52428800;?//50MB?});?}

這適用于整個應用程序的任何請求。該值是一個可空的長值。將它設置為 null 會禁用該限制。現(xiàn)在你可能會想,為什么這對 windows 不起作用,因為 IIS 也使用 Kestrel。原因是,這個設置對于運行在 IIS 后面的 Kestrel 來說是無效的,在 IIS 后面應用的是正常的 web.config 限制。雖然這是一個全局設置,但它可以通過中間件.MaxRequestBodySize 來覆蓋每個請求。

3.3

? ?

中間件方案

如果你想基于請求覆蓋全局設置,你可以通過中間件來實現(xiàn)。這樣你就可以通過一些靈活的配置來修改單個請求。比如

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder => { context.Features.Get<IHttpMaxRequestBodySizeFeature>() .MaxRequestBodySize = null; //TODO: take next steps });

請記住,在讀取請求體開始后,不能更改。如果你在應用開始讀取請求后試圖配置請求的限制,會拋出一個異常。有一個屬性可以指示是否處于只讀狀態(tài),也就是說來不及配置限制了。IsReadOnlyMaxRequestBodySize(只讀最大請求體大小)

4

? ?

概要

綜上所述,本帖提供了增加 ASP.NET Core 應用的請求限制大小的解決方案,涵蓋了所有可能的部署方案。根據(jù)你的部署模式,你需要進行配置修改。不過,不管是哪種部署方案,如果有一個增加請求限制的單一解決方案,那將是最理想的。

總結

以上是生活随笔為你收集整理的如何在ASP.NetCore增加文件上传大小的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。