首页 > 其他分享 >Net8 webAPI 创建(傻瓜式入门)

Net8 webAPI 创建(傻瓜式入门)

时间:2024-05-13 15:08:57浏览次数:11  
标签:webAPI index Name 傻瓜式 IEnumerable Net8 new public option

前沿

学不止境 ( 还是用windows 学习吧 mac 太不友好了)

让我来新建个Net8 webapi core

 

然后看到这个页面

选择不适用顶级语句

然后配置你的目录

 

 然后打开vs studio 看到编辑页面

 

可以在controllers 里面创建新的.cs请求 比如我新建了firstController

 

 写入get put post delete

using Microsoft.AspNetCore.Mvc;

namespace yanfanWebNetAPi.Controllers;

[ApiController]
[Route("[controller]")]
public class FirstController : ControllerBase
{
 
    private readonly ILogger<FirstController> _logger;

    public FirstController(ILogger<FirstController> logger)
    {
        _logger = logger;
    }

    //[HttpGet(Name = "GetWeatherForecast")]

    [HttpGet]
    public IEnumerable<WeatherForecast> GetInfo()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }

    [HttpPost]
    public IEnumerable<WeatherForecast> GetPost()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }

    [HttpPut]
    public IEnumerable<WeatherForecast> GetPut()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }

    [HttpDelete]
    public IEnumerable<WeatherForecast> GetDelete()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }
}

然后运行你的代码

 然后你会发现谷歌浏览器运行了

 这样就形成了你的接口 

我只能说66666666

 

RestFul api

 有一个唯一的url 地址:操作某一个资源的

 

把上面的firstController 改为  FirstUserController

 

 一个控制器里面有多个get 请求

请这样写

  [HttpGet]
    public IEnumerable<WeatherForecast> GetInfo()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }

    [HttpGet]
    [Route("{userId:int}")] //特性路由
    public IEnumerable<WeatherForecast> GetUser(int userId)
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }

上面添加这个 

[Route("{userId:int}")] //特性路由 

这样就可以让一个控制器有多个相同的get请求

你可以看到

 

swagger注释

只要在你的代码里面写/// 就有代码提示了

    /// <summary>
    /// Delete
    /// </summary>
    /// <returns></returns>
    [HttpDelete]
    public IEnumerable<WeatherForecast> GetDelete()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
        })
        .ToArray();
    }

 

swagger版本控制

 

根目录选择最上面 右键

 

选择类库

 

正在你的Program.cs 下的

 

#region 版本控制
foreach(FieldInfofield in typeof(ApiVersionInfo).GetFields())
{
option.SwaggerDoc(field.Name,newOpenApiInfo()
{
Title=$"{field.Name}:我的CoreWebApi~",
Version = field.Name,
Description= $"coreWebApi{field.Name版本"
}
) ;
#endregion

      app.UseSwaggerUI();里面写入

app.UseSwaggerUI(option =>{
foreach(FieldInfofieldintypeof(ApiVersionInfo).GetFields())
{
option.SwaggerEndpoint(s"/swagger/(field.Name)/swagger.json",
$"(field.Name}"
);
}
});

 然后在你的页面版本

 

[ApiExplorerSettings(GroupName = nameof(ApiVersionInfo.V1))]

然后再运行就可以看到版本了

 

swagger Token传值

  #region 支持token产值
            {
                option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
                {
                    Description = "请输入token,格式为Bearerxxxxxxxx(注意中间必须有空格)",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    BearerFormat = "JWT",
                    Scheme = "Bearer"
                });
            }
            #endregion

添加安全代码

    //添加安全要求
                option.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                       new OpenApiSecurityScheme
                       {
                           Reference = new OpenApiReference()
                           {
                                 Type = ReferenceType.SecurityScheme,
                                 Id = "Bearer"
                           }
                    },
                    new string[]{ }
                }

 

 

        builder.Services.AddSwaggerGen(option => {
            #region 支持Swagger版本控制
            {
                //foreach (FiledInfo field in typeof(ApiVersionInfo).GetFields())
                //{
                //}
                //foreach (var item in typeof(ApiVersionInfo).GetFields())
                //{
                //}
            }
            #endregion
            #region 支持token产值
            {
                option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
                {
                    Description = "请输入token,格式为Bearerxxxxxxxx(注意中间必须有空格)",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    BearerFormat = "JWT",
                    Scheme = "Bearer"
                });

                //添加安全要求
                option.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                       new OpenApiSecurityScheme
                       {
                           Reference = new OpenApiReference()
                           {
                                 Type = ReferenceType.SecurityScheme,
                                 Id = "Bearer"
                           }
                    },
                    new string[]{ }
                }
            });
            } 
            #endregion
        });
View Code

 

代码

然后就看到

 

这样就设置了登陆的token

 

标签:webAPI,index,Name,傻瓜式,IEnumerable,Net8,new,public,option
From: https://www.cnblogs.com/yf-html/p/18188728

相关文章

  • 基于webapi的websocket聊天室(三)
    上一篇处理了超长消息的问题。我们的应用到目前为止还是单聊天室,这一篇就要处理的多聊天室的问题。思路第一个问题,怎么访问不同聊天室这个可以采用路由参数来解决。我把路由设计成这样/chat/{room}。访问不同路径就代表进入不同聊天室。第二个问题,怎么创建不同的聊天室原......
  • 基于webapi的websocket聊天室(二)
    上一篇-基于webapi的websocket聊天室(一)消息超传缓冲区的问题在上一篇中我们定义了一个聊天室WebSocketChatRoom。但是每个游客只分配了400个字节的发言缓冲区,大概100字。如果需要发送更多内容呢?难道直接增大缓冲区?这是一个办法。但还有其他办法。多次接受消息可以多次调......
  • 基于webapi的websocket聊天室
    上一次我已经讲了在webapi主机上面加入websocket中间件。这次就更进一步,搭建一个websocket局域网聊天室。传送门-->webapi添加添加websocket中间件聊天室websocket通信其实和win32api里面的消息循环差不多,只不过一个消息来自操作系统,一个来自网络。但核心都是一个阻塞的while......
  • 【转】[C#] WebAPI 防止并发调用二(冥等性)
    来自:阿里的通义灵码使用幂等性设计来防止C#WebAPI方法的并发调用是一种推荐的方法,因为它不会阻塞其他请求,而是确保多次调用同一个操作会产生相同的结果。这里有一个简单的示例,说明如何在WebAPI控制器中实现幂等性的API:usingSystem;usingSystem.Web.Http;usingSystem.Lin......
  • 【转】[C#] WebAPI 防止并发调用一(锁)
    来源:阿里的通义灵码在C#WebAPI中,如果你想要使用锁来防止并发调用,你可以使用System.Threading.Mutex或System.Threading.Lock来实现。但是,这种方法通常不推荐,因为它可能会导致请求阻塞,从而影响整个Web服务的性能。在Web环境中,更好的做法是使用幂等性设计或数据库事务来处理并发......
  • webapi添加添加websocket中间件
    添加位置我按照MSDN的例子添加了一个复述客户端响应的中间件。需要注意的时,中间件采用那种方式添加,添加在哪。哪种方式我选择创建一条管道分支,只要时ws的连接请求,就转到这个分支因此,我们需要使用的是MapWhen()来创建管道分支。添加在哪要注意授权的问题,所以应该添加到授权......
  • webapi中间件没有使用终结点中间件时的注意事项
    最小webapi默认的中间件配置是这样的app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();最小webapi没有使用app.UseRouting()和app.UseEndpoints。这种情况下我们添加的所有中间件其实都是位于终结点路由中间件EndpointRoutingMiddleware......
  • webapi创建和调用WebService
    首先需要引入soapcore包这个包提供了所需的类和soap终结点中间件。引入这个这个包之后,我们需要定义提供的服务。这里我写了一个用于查询省份面积的服务。省份信息服务///<summary>///省份信息服务接口///</summary>[ServiceContract]publicinterfaceIProvinceInfo......
  • ABAP 调用外部WEBAPI
    ABAP代码如下,仅在内部测试通过,未涉及外部网络WEBAPI及跨域调用。*&---------------------------------------------------------------------**&ReportZYC_WEBAPI*&Restfulapi测试REPORTZYC_WEBAPI.DATA:LENTYPEI,"发送报文长度LEN_STRING......
  • webapi动态创建后台任务(使用排队的后台任务)
    很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应。这时候就可以使用排队的后台任务。基本原理是用一个队列保存任务委托,然后用一个后台定时任务依次执行队列中的委托。MSD......