当前位置: 首页 > news >正文

ASP.NET Core Web API 中控制器操作的返回类型及Swagger

ASP.NET Core Web API 中控制器操作的返回类型及Swagger

  • 前言
  • 一、ControllerBase
    • 1.Content()
    • 2.Forbid()
    • 3.Ok()
    • 4.Problem()
    • 5.NoContent()
    • 6.NotFound()
    • 7.Unauthorized()
    • 8.ValidationProblem()
    • 9.PhysicalFile()
    • 10.总结
  • 二、Swagger配置
    • 1.Program.cs中代码修改
    • 2.Visual Studio 2022设置
  • 三、dotnet8跨域处理


前言

👨‍💻👨‍🌾📝文章标题有些长,但是为了说清楚问题,只能啰嗦一点了。

本篇是ControllerBase中几个返回IActionResult接口或实现类(含子类)操作函数的学习与总结。期间使用的是Swagger测试了,发现Swagger还是需要一些设置的,顺带也记录一下。最后又学了一下跨域处理。


一、ControllerBase

ControllerBase中的处理函数比较多,本篇只是从函数的英文字面意思来看觉得很常见,所以挑出了几个研究一下。
ControllerBase文档:https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.mvc.controllerbase?view=aspnetcore-8.0

1.Content()

代码:

/// <summary>
/// 测试Content()
/// </summary>
/// <param name="content">内容</param>
/// <returns>参数content</returns>
[HttpGet]
public IActionResult TestContent([FromQuery]string content)
{Debug.WriteLine(content);return Content(content);
}

Swagger效果:
在这里插入图片描述

在这里插入图片描述

可以看到HTTP 状态代码 200。

2.Forbid()

代码:

/// <summary>
/// 测试Forbid()
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult TestForbid()
{return Forbid();
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到HTTP 状态代码 500。

3.Ok()

代码:

/// <summary>
/// 测试Ok()
/// </summary>
/// <param name="param">参数</param>
/// <returns></returns>
[HttpGet]
[Produces("application/json")]
public IActionResult TestOk([FromQuery] string param)
{Debug.WriteLine(param);return Ok(param);
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述

可以看到HTTP 状态代码 200。

4.Problem()

代码:

/// <summary>
/// 测试Problem()
/// </summary>
/// <param name="problem">问题</param>
/// <returns></returns>
[HttpPost]
public IActionResult TestProblem([FromBody] string problem)
{Debug.WriteLine(problem);return Problem(problem);
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到HTTP 状态代码 400。

5.NoContent()

代码:

/// <summary>
/// 测试NoContent()
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult TestNoContent()
{return NoContent();
}

Swagger效果:
在这里插入图片描述
可以看到HTTP 状态代码 204。

6.NotFound()

代码:

/// <summary>
/// 测试NotFound()
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult TestNotFound()
{return NotFound();
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述
可以看到HTTP 状态代码 404。 很标准、很典型。

7.Unauthorized()

代码:

/// <summary>
/// 测试Unauthorized()
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult TestUnauthorized()
{return Unauthorized();
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述
可以看到HTTP 状态代码 401。

8.ValidationProblem()

代码:

/// <summary>
/// 测试ValidationProblem()
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult TestValidationProblem()
{return ValidationProblem();
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述
可以看到HTTP 状态代码 400。

9.PhysicalFile()

代码:

/// <summary>
/// 测试PhysicalFile()
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult TestPhysicalFile()
{var str = Environment.CurrentDirectory;Debug.WriteLine(str);var filePath = Path.Combine("E:\\csharpcode2022\\ConsoleApp1\\WebApplication1\\bin\\Debug", "1.txt");return PhysicalFile(filePath, "application/text", "1.txt");
}

Swagger效果:
在这里插入图片描述
在这里插入图片描述

可以看到HTTP 状态代码 200。

10.总结

  1. 本人认为WEB服务器本身的状态码与业务的代码应该不是同一个概念,不应该混用。代码只要执行到Controller里面,如果有问题,那就一定是业务有问题,与服务器本身没有关系。
  2. 基于第1点的认识,以上列举的9个函数中,貌似只有Content()、Ok()、Unauthorized()与PhysicalFile()能直接用在业务代码中。而Unauthorized()能用,是把用户的权限提升到WEB服务器的权限。

在微软文档StatusCodes类中可以查看更全面的状态代码:https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.http.statuscodes?view=aspnetcore-8.0

二、Swagger配置

1.Program.cs中代码修改

builder.Services.AddSwaggerGen();

改成如下代码:

builder.Services.AddSwaggerGen(options =>
{options.SwaggerDoc("v1", new OpenApiInfo{Version = "v1",Title = "测试MVC文档",Description = "An ASP.NET Core Web API"});// using System.Reflection;var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
});

2.Visual Studio 2022设置

项目右击,选择“属性”,然后“生成”=>“输出”,勾选文档文件

在这里插入图片描述
Swagger接口效果:
在这里插入图片描述
到这里可以知道Swagger界面里的一些内容是根据一个xml文档来的。

三、dotnet8跨域处理

Program.cs中新增2处代码,亲测有效。

//添加跨域策略
builder.Services.AddCors(options =>
{options.AddPolicy("CorsPolicy", opt => opt.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
});//使用跨域策略
app.UseCors("CorsPolicy");

跨域测试代码:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>测试</title><script type="text/javascript" src="jquery.min.js"></script></head><body><br><br><div><button onclick="SendGet()">get</button></div><br><br><div><button onclick="SendPost()">post</button></div><br><br></body><script type="text/javascript">		function SendGet(){$.get("http://localhost:5262/Test/TestContent?content=123",function(data,status){alert("Data: " + data + "\nStatus: " + status);});}function SendPost(){$.post("http://localhost:5262/Test/TestOk?param=%7B%22name%22%3A%20%22Tom%22%7D",{name:"Tom",age:3},function(data,status){alert("Data: " + data + "\nStatus: " + status);});}</script>
</html>
http://www.dtcms.com/a/439216.html

相关文章:

  • AI模型测评平台工程化实战十二讲(第六讲:大模型测评系统:智能模型管理模块的设计与实现)
  • 手写MyBatis第90弹:动态SQL测试策略与验证方法
  • 比较有名的公司网站网站建设犀牛云
  • 网站备案 企业备案响应式博客wordpress
  • AI 重塑实体经济:2025 传统产业转型的南通实践启示
  • 番禺建设网站平台网站建设所需要的内容
  • 网站每年续费费用南通制作网站
  • 特优项目网站建设方案辽宁建设工程信息网开评标系统
  • 哪个网站可以做验证码兼职强 的软件免费的软件下载
  • IPV4/Ipv6公网检测网站, DDNS配置
  • 贵州省城乡和住房建设厅网站线上app怎么做
  • 地方网站推广云主机费用
  • QT肝8天13--删除用户
  • 素材分享网站源码北龙中网 可信网站验证 费用
  • P7226 [COCI 2015/2016 #3] POT
  • 网店代运营网站建设银行信用卡积分兑换话费网站
  • 数字资产离婚分割案:巨额数字资产归谁所有?
  • 网站源码安装教程阳江房产网站
  • 2.VMware上的Kali Linux操作系统安装(2025年10月3日)
  • 全志T113-S3开发板遇到的问题
  • 神卓云监控 K900:异地监控技术落地与方案优化实践
  • 东莞企业网站排名wordpress重置后密码是多少
  • 设计网站建设网站美化教程下载
  • 队列算法精讲:从栈与队列互实现到循环队列(待补充)
  • 蝴蝶优化算法:原理、改进与应用
  • 你会怎么做外国的网站建一个购物网站多少钱
  • 数据驱动下的集成学习实战:从算法选型到业务落地的完整方法论
  • dw旅游网站模板下载物流网站如何设计
  • 建网站能挣钱吗WordPress老文章提示
  • 类中特殊成员(Num018)