.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 "名字";
    }
}
相关推荐
兰_博1 小时前
ensp配置-无线局域网配置
网络
许彰午1 小时前
17-22-运维与高级主题
运维·网络
万联WANFLOW1 小时前
外贸独立站:服务器放海外国内后台卡,放国内海外客户打不开——这道两头难怎么破?
运维·网络·数据库·经验分享
Kari112 小时前
连锁门店开业网络验收怎么做:把 PDF 清单改造成可回放的 Skill
网络·人工智能·pdf·php
玖玥拾2 小时前
Unity 3D 笔记(十二)Unity/C# Socket 网络笔记1
网络·unity·c#
2401_891957312 小时前
简单了解传输层协议UDP
网络·网络协议·udp
AvatarAI_Walker3 小时前
2026年7月安徽本地健康IP孵化行业观察:不同需求下的服务方向梳理
大数据·网络·tcp/ip·搜索引擎·精选
一棵星3 小时前
WebSocket 长连接不稳?一次完整的排查与修复之旅
网络·websocket·网络协议
发量惊人的中年网工3 小时前
AI服务器托管怎么选机房?GPU集群对机柜、电力和网络的硬要求
服务器·网络·人工智能
玖玥拾3 小时前
Unity 3D 笔记(十五)Unity/C# Socket 网络笔记4
服务器·网络·unity·c#