首页 > 编程语言 >我的Swagger实例ASP.NET MVC 集成SwaggerUI

我的Swagger实例ASP.NET MVC 集成SwaggerUI

时间:2022-12-11 23:33:18浏览次数:69  
标签:SwaggerUI ASP System JsonData MVC result using new public

 

 

注意:

1.在此之前你要确定你已经通过NuGet安装好 Swashbuckle v5.6.0

我的Swagger实例ASP.NET MVC 集成SwaggerUI_json

2.Web项目右键属性-》生成-》勾选XML文档文件,建议用默认路径 

我的Swagger实例ASP.NET MVC 集成SwaggerUI_System_02

3.并且,修改了 ,项目》App_Start》SwaggerConfig.cs

104 行  取消  c.IncludeXmlComments(GetXmlCommentsPath());  注释

并且添加方法

public static string GetXmlCommentsPath() { return $"{System.AppDomain.CurrentDomain.BaseDirectory}\\bin\\WebSocket.xml"; }

 

4.开启了特性路由

项目》App_Start》RouteConfig.cs

routes.MapMvcAttributeRoutes();

完整代码

namespace WebSocket
{
public class RouteConfig
{

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}

项目API结构

我的Swagger实例ASP.NET MVC 集成SwaggerUI_List_03

JsonTools.cs

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Web;

namespace WebSocket.Api
{
#region /封装的JsonData/
/// <summary>
/// JsonData返回类型
/// </summary>
[JsonObject(MemberSerialization.OptIn)]
public class JsonData<T> : HttpResponseMessage
{
/// <summary>
///数据状态一切正常的状态码 0:成功,1:失败
/// </summary>
[JsonProperty]
public int code { get; set; } = 1;
/// <summary>
/// 状态信息
/// </summary>
[JsonProperty]
public String msg { get; set; } = "失败";
/// <summary>
/// 数据详情
/// </summary>
[JsonProperty]
public List<T> data { get; set; }

/// <summary>
/// 数据总条数
/// </summary>
[JsonProperty]
public int count { get; set; } = 0;
}
/// <summary>
/// JsonTools工具类
/// </summary>
public static class JsonTools
{
private static Encoding encoding = System.Text.Encoding.UTF8;
private static string mediaType = "application/json";
/// <summary>
/// 转换成JsonData
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="str">参数</param>
/// <returns>返回JsonData类型</returns>
public static JsonData<T> ToJsonData<T>(this T str)
{
var jsondata = new JsonData<T>();
try
{
JsonData<T> result = new JsonData<T>();
List<T> list = new List<T>();
list.Add(str);
result.data = list;
result.code = 0;
result.msg = "成功";
result.count = list.Count;
string json = JsonConvert.SerializeObject(result);
jsondata = new JsonData<T> { Content = new StringContent(json, encoding, mediaType) };

}
catch (Exception e)
{
JsonData<string> result = new JsonData<string>();
List<string> list = new List<string>();
list.Add($"异常:{e.Message}");
result.data = list;
string json = JsonConvert.SerializeObject(result);
jsondata = new JsonData<T> { Content = new StringContent(json, encoding, mediaType) };
}

return jsondata;
}

/// <summary>
/// 转换成JsonData
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="str">参数</param>
/// <returns>返回JsonData类型</returns>
public static JsonData<T> ToJsonData<T>(this List<T> str)
{
var jsondata = new JsonData<T>();
try
{
JsonData<T> result = new JsonData<T>();
result.data = str;
result.code = 0;
result.msg = "成功";
result.count = str.Count();
string json = JsonConvert.SerializeObject(result);
jsondata = new JsonData<T> { Content = new StringContent(json, encoding, mediaType) };

}
catch (Exception e)
{
JsonData<string> result = new JsonData<string>();
List<string> list = new List<string>();
list.Add($"异常:{e.Message}");
result.data = list;
string json = JsonConvert.SerializeObject(result);
jsondata = new JsonData<T> { Content = new StringContent(json, encoding, mediaType) };
}
return jsondata;
}
}
#endregion
}

 

Newtonsoft.Json忽略某些属性

  类似本问开头介绍的接口优化,实体中有些属性不需要序列化返回,可以使用该特性。首先介绍Json.Net序列化的模式:OptOut 和 OptIn

OptOut

默认值,类中所有公有成员会被序列化,如果不想被序列化,可以用特性JsonIgnore

OptIn

默认情况下,所有的成员不会被序列化,类中的成员只有标有特性JsonProperty的才会被序列化,当类的成员很多,但客户端仅仅需要一部分数据时,很有用

 

 

 

WenZhangController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;

namespace WebSocket.Api
{
/// <summary>
/// 文章获取API
/// </summary>
public class WenZhangController : ApiController
{
/// <summary>
/// 根据ID查询文章
/// </summary>
/// <param name="id">文章id (必填项)</param>
/// <returns>UserTest</returns>
[HttpGet]
[Route("API/WenZhang/Id/{id}/")]

public JsonData<UserTest> Id(int id)
{

UserTest result = new UserTest()
{
id = 1,
name = "小米"
};

return result.ToJsonData();
}

/// <summary>
/// 根据名称查询
/// </summary>
/// <param name="name">文章名称</param>
/// <returns>JSON格式数据</returns>

[HttpGet]
[Route("API/WenZhang/Name/{name}/")]
public JsonData<UserTest> Name(string name)
{
var result = new UserTest()
{
id = 1,
name = "小米"
};

return result.ToJsonData();
}


/// <summary>
/// 获取所有文章分页列表
/// </summary>
/// <param name="PageSize">分页大小</param>
/// <param name="PageIndex">当前页</param>
/// <returns>返回:获取所有文章分页列表</returns>
[HttpGet]
[Route("API/WenZhang/PageList/{PageSize}/{PageIndex}")]
public JsonData<UserTest> PageList(int PageSize, int PageIndex)
{
//string[] result = { "value1", "value2" };

List<UserTest> result = new List<UserTest>();

for (int i = 0; i < 20; i++)
{
var r = new UserTest()
{
id = i,
name = "小米" + i
};
result.Add(r);
}

return result.ToJsonData<UserTest>();
}

}
/// <summary>
/// UserTest
/// </summary>
public class UserTest
{
/// <summary>
/// id
/// </summary>
public int id { set; get; }
/// <summary>
/// name
/// </summary>
public string name { set; get; }
}

}

截图:

我的Swagger实例ASP.NET MVC 集成SwaggerUI_json_04

我的Swagger实例ASP.NET MVC 集成SwaggerUI_System_05

我的Swagger实例ASP.NET MVC 集成SwaggerUI_System_06

可能你还需要

c# asp.net mvc API接口安全过滤,api域名过滤,api域名+端口过滤


 

 



 

 

标签:SwaggerUI,ASP,System,JsonData,MVC,result,using,new,public
From: https://blog.51cto.com/cplvfx/5928931

相关文章