田敏
返回博客列表
技术

WebApi

田敏
2023-12-121 分钟阅读
CodingTipsC#

1、asp.net core 和asp.net framework

ASP.NET Core和ASP.NET Framework都是由Microsoft开发的Web应用程序框架,但它们有一些关键的区别。以下是它们之间的一些主要区别:

  1. 跨平台性:
    • ASP.NET Core: 完全跨平台,可以在Windows、Linux和macOS上运行。这使得在不同操作系统上部署和运行应用程序更为灵活。
    • ASP.NET Framework: 主要针对Windows平台。尽管有一些尝试将ASP.NET Framework应用程序移植到非Windows平台的工具,但它并不像ASP.NET Core那样天生具备跨平台支持。
  2. 开发模型:
    • ASP.NET Core: 引入了新的、更轻量级的开发模型,支持更灵活的应用程序部署和维护。它是一个开源框架,具有更快的性能和更好的可测试性。
    • ASP.NET Framework: 是一个传统的、较为庞大的框架,支持多种应用程序类型(Web、桌面、服务等)。由于历史原因,它可能包含一些不太灵活或过时的特性。
  3. NuGet包管理:
    • ASP.NET Core: 使用NuGet作为主要的包管理系统,允许在项目中选择性地添加或删除组件。
    • ASP.NET Framework: 使用NuGet包,但在早期版本中,它主要依赖于全局安装的.NET Framework版本。
  4. 性能:
    • ASP.NET Core: 针对性能进行了优化,具有更快的启动时间和更高的吞吐量。它还包含了一些新的特性,如Kestrel服务器,这是一个高性能的跨平台Web服务器。
    • ASP.NET Framework: 相对较为庞大,启动时间较长,性能较低。
  5. 版本控制:
    • ASP.NET Core: 使用语义化版本控制(Semantic Versioning),并且采用了更加灵活的发布模型。
    • ASP.NET Framework: 采用了传统的版本控制方式,通常与Windows操作系统版本相关联。

2、[ApiController]特性

前端

        document.querySelector("#Post").onclick = function () {
            var userName = "Ace";
            var postData = `name=${userName}`
            axios.post("https://localhost:44326/home",{name:userName,age:18}).then(function (res) {
                console.log(res.data);
            })
        }

后端

        [HttpPost]
        public string Post(UserInput userInput)
        {
            //if (ModelState.IsValid)
            //{
            //    return BadRequest(ModelState);
            //}
            return "这是Post";
        }

当不使用ApiController特性:后端收到的userInput为空

当使用ApiController特性:userInput为前端传入的对象

ApiController特性的作用:

1.ApiController可以自动推断参数的模型绑定,所以不需要我们在对参数指定[FromBody]或者[FromData],ApiController可以帮助我们自动验证模型状态,如果验证不通过会自动返回400

3、formdata和json的区别

4、axios的几种传参

5、跨域问题

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是****浏览器施加的****安全限制

同源策略规定:

  1. 协议相同
  2. 域名相同
  3. 端口相同

http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)

http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

img

asp.net core 解决跨域的问题:

在ASP.NET Core中,解决跨域问题主要通过配置CORS(Cross-Origin Resource Sharing)来实现。CORS是一种安全机制,允许或阻止在不同域之间的资源共享。

以下是在ASP.NET Core中解决跨域问题的一般步骤:

  1. 安装Microsoft.AspNetCore.Cors NuGet包: 在项目中安装Microsoft.AspNetCore.Cors NuGet包。可以通过Visual Studio的NuGet包管理器或者使用命令行工具执行以下命令来安装:
    dotnet add package Microsoft.AspNetCore.Cors
    
  2. 在Startup.cs中配置CORS: 打开Startup.cs文件,找到ConfigureServices 方法,并添加如下配置:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyOrigin",
                builder =>
                {
                    builder.AllowAnyOrigin()
                           .AllowAnyMethod()
                           .AllowAnyHeader();
                });
        });
    
        // 其他服务配置...
    }
    

    这段代码创建了一个名为 "AllowAnyOrigin" 的CORS策略,该策略允许任何来源、任何HTTP方法和任何HTTP头部的请求。你可以根据需要配置更复杂的策略。

  3. 在Configure方法中启用CORS中间件:Configure 方法中添加以下代码启用CORS中间件:
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // 其他中间件配置...
    
        app.UseCors("AllowAnyOrigin");
    
        // 其他配置...
    }
    

    UseCors 方法指定了之前定义的CORS策略的名称("AllowAnyOrigin"),确保CORS中间件在请求管道中的正确位置。

4.添加特性 [EnableCors("any")]

完成以上步骤后,应用程序就配置好了基本的CORS,允许来自任何来源的请求。

参考文章:

什么是跨域?怎么解决跨域问题?-CSDN博客

版权协议:MIT返回列表