net8 webapi

直接用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中修改:

<system.webServer>中加入:
<security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647">        </requestLimits>
      </requestFiltering>
</security>

以上測試調用未加  [DisableRequestSizeLimit]的p3接口上調用成功,但在p4接口上反而失敗。

如果直接用exe發佈web則不需web.config中配置最大值,直接使用   [DisableRequestSizeLimit]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章