直接用net8 web api模板,創建時不要選控制器,直接添加類文件,並調整基類等即可
using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.Text.Unicode; namespace WebApplication1.Controllers { [ApiController] [Route("[controller]/[action]")] public class HelloController : ControllerBase { [HttpGet] public string Get1() { JObject ob = new JObject(); ob["姓名"] = "ljq"; ob["年"] = 40; string str = ob.ToString(); return str; } [HttpGet] public string Get2(string str, int m) { JObject ob = new JObject(); ob["姓名"] = str; ob["年"] = m; string t = ob.ToString(); return t; } [HttpGet("{str}/{m}")] public string Get3(string str, int m) { JObject ob = new JObject(); ob["姓名"] = str; ob["年"] = m; string t = ob.ToString(); return t; } [HttpGet("{str}/{m}")] [HttpPost("{str}/{m}")] public async Task<string> p1(string str, int m) { JObject ob = new JObject(); foreach (var item in this.Request.Headers) { ob[item.Key] = item.Value.ToString(); } StreamReader r = new StreamReader(this.Request.Body); string b = await r.ReadToEndAsync(); ob["b"] = b; string t = ob.ToString(); return t; } [HttpPost] [RequestSizeLimit(int.MaxValue)] [RequestFormLimits(MultipartBodyLengthLimit = int.MaxValue)] public async Task<string> p2() { //這個可以接收字符串,也可接收二進制,可以替代p1函數 JObject ob = new JObject(); foreach (var item in this.Request.Headers) { ob[item.Key] = item.Value.ToString(); } MemoryStream ms = new MemoryStream(2); await this.Request.Body.CopyToAsync(ms); byte[] bytes = ms.ToArray(); string str = System.Text.Encoding.UTF8.GetString(bytes); ob["b"] = str; string t = ob.ToString(); return t; } [HttpPost] //[RequestSizeLimit(int.MaxValue)] //[RequestFormLimits(MultipartBodyLengthLimit = int.MaxValue)] [DisableRequestSizeLimit] public async Task<string> p3() { //這個可以接收字符串,也可接收二進制,可以替代p1函數
//默認上傳30M以下,如果超過則加上面的配置
JObject ob = new JObject(); foreach (var item in this.Request.Headers) { ob[item.Key] = item.Value.ToString(); } MemoryStream ms = new MemoryStream(2); await this.Request.Body.CopyToAsync(ms); byte[] bytes = ms.ToArray(); FileStream fs = new FileStream("d:\\1.zip", FileMode.Create); fs.Write(bytes, 0, bytes.Length); ms.Close(); fs.Close(); return "ok"; } [HttpPost] public async Task<string> p4() { //這個可以接收字符串,也可接收二進制,可以替代p1函數 JObject ob = new JObject(); foreach (var item in this.Request.Headers) { ob[item.Key] = item.Value.ToString(); } MemoryStream ms = new MemoryStream(2); await this.Request.Body.CopyToAsync(ms); byte[] bytes = ms.ToArray(); FileStream fs = new FileStream("d:\\1.zip", FileMode.Create); fs.Write(bytes, 0, bytes.Length); ms.Close(); fs.Close(); return "ok"; } } }
在iis上發佈要安裝:dotnet-hosting-8.0.1-win.exe
直接執行exe文件可以發佈,在Windows2019 IIS發佈成功,在Windows10 iis發佈失敗
上傳大於30M的問題,在IIS上發佈時,需要在Web.config中修改:
<security> <requestFiltering> <requestLimits maxAllowedContentLength="2147483647"> </requestLimits> </requestFiltering> </security>
以上測試調用未加 [DisableRequestSizeLimit]的p3接口上調用成功,但在p4接口上反而失敗。
如果直接用exe發佈web則不需web.config中配置最大值,直接使用 [DisableRequestSizeLimit]