.Net中路由设置

.Net中路由设置

自定义路由模板

第一种写法

csharp 复制代码
[Route("/api/[controller]/[action]")]
[ApiController]
public class TestController : Controller
{
    [HttpGet("")]
    public string GetRoute1()
    {
        return "使用/api/[controller]/[action],返回路由";
    
}

第二种写法

csharp 复制代码
[Route("/api/[controller]")]
[ApiController]
public class TestController : Controller
{
    [HttpGet("[action]")]
    public string GetRoute2()
    {
        return "使用/api/[controller],返回路由";
    }
}

路径传参

必传参数

其中id可以自定义设置

csharp 复制代码
[HttpGet("/arg/{id}")]
public string GetRouteByArg(int id)
{
    return "路径传参";
}

这样写可以指定id类型

csharp 复制代码
[HttpGet("/arg/{id:int}")]
public string GetRouteByArg(int id)
{
    return "路径传参";
}

可选传参

需要注意的是,这个?要在下面函数中也要指定?

csharp 复制代码
[HttpGet("/choose/arg/{id:int?}")]
public string GetRouteByArgChoose(int? id)
{
    return $"可选择传参{id}";
}

给定默认值传参

csharp 复制代码
[HttpGet("/default/arg/{id:int=200}")]
public string GetRouteByDefaultArg(int id)
{
    return $"给定默认值传参{id}";
}

最大值约束

csharp 复制代码
[ApiController]
[Route("/api/[controller]")]
public class GeneratorController : ControllerBase
{
    [HttpPost("arg/{id:int:max(10)}")]
    public string GetByArgId(int id)
    {
        return $"最大值约束{id}";
    }
}

自定义路由属性模板

重写父类Attribute, IRouteTemplateProvider

我们每次使用[Route]这个是框架封装好的,但是我们有时需要自己自定义。

新建BunnyRoteAttribute.cs文件,在Template中写上你自己的名字即可。

csharp 复制代码
using Microsoft.AspNetCore.Mvc.Routing;

namespace Bunny.LinkGenerator.Net.Config;

public class BunnyRoteAttribute : Attribute, IRouteTemplateProvider
{
    public string? Template => "bunny/myTemplate";
    public int? Order => 1;
    public string? Name { get; set; }
}

也可以指定控制器

csharp 复制代码
public class BunnyRoteAttribute : Attribute, IRouteTemplateProvider
{
    public string? Template => "bunny/myTemplate/[controller]";
    public int? Order => 1;
    public string? Name { get; set; }
}

项目使用

csharp 复制代码
using Bunny.LinkGenerator.Net.Config;
using Microsoft.AspNetCore.Mvc;

namespace Bunny.LinkGenerator.Net.Controller;

[BunnyRote(Name = "CustomRoute")]
[ApiController]
public class CustomController : ControllerBase
{
    [HttpGet("GetByCustom")]
    public string GetByCustom()
    {
        return "自定义属性路由";
    }
}

注意事项

有相同路径

如果路径有相同,但是只要一个路由那么会自动匹配第一个,如果有两个及以上路径相同会报错!!!

csharp 复制代码
[Route("/api/[controller]")]
public class SameNameController : ControllerBase
{
    [HttpGet("GetNameById")]
    public string GetNameById()
    {
        return "134";
    }
    
    [HttpGet("GetNameById")]
    public string GetNameById1()
    {
        return "134";
    }
}

控制器没有使用模板

csharp 复制代码
[ApiController]
public class Warning1Controller : ControllerBase
{
    [HttpGet("GetName/{id:int}")]
    public string GetName(int id)
    {
        return "名字";
    }
}
```csharp
[ApiController]
public class Warning1Controller : ControllerBase
{
    [HttpGet("GetName/{id:int}")]
    public string GetName(int id)
    {
        return "名字";
    }
}
相关推荐
源远流长jerry4 分钟前
DPDK 内存管理深度解析:从大页到 Mbuf 的完整链路
linux·服务器·网络
Predestination王瀞潞1 小时前
5.4.2 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web) 核心技术规范
网络·网络协议·https·www
@insist1231 小时前
软件设计师-组网技术基础:网络设备、传输介质与局域网核心协议
开发语言·网络·软考·软件设计师·软件水平考试
虾..2 小时前
TCP协议
网络·网络协议·tcp/ip
上去我就QWER2 小时前
详解HTTP协议中的multipart/form-data
网络·网络协议·http
武藤一雄3 小时前
WPF处理耗时操作的7种方法
microsoft·c#·.net·wpf
@encryption3 小时前
TCP,IP
服务器·网络·tcp/ip
武藤一雄3 小时前
C#常见面试题100问 (第一弹)
windows·microsoft·面试·c#·.net·.netcore
F1FJJ4 小时前
我用一条命令把内网的 RDP 桌面开到了浏览器里 —— Shield CLI 与主流隧道工具的技术对比
网络·golang
bigcarp5 小时前
邮箱服务中的代发邮件-发送邮件登录账号不等于发件地址 MAIL FROM≠登录账号
网络