前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在路由绑定中使用 IParsable

如何在路由绑定中使用 IParsable

作者头像
newbe36524
发布于 2023-08-23 08:09:20
发布于 2023-08-23 08:09:20
17300
代码可运行
举报
运行总次数:0
代码可运行

IParsable 是 .Net 7 中新增的接口,它可以将字符串转换为对应的实体。在 Controller 的 Route 绑定中可以使用 IParsable 来绑定复杂的实体。

实验背景

假设有一个需要将 route “report/{month}-{day}” 绑定到 MyDate 对象上的场景。

在 .Net 7 之前,通常是使用两个参数来接收绑定的 month 和 day,然后在代码中实例化 MyDate 对象。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Route("report/{month}-{day}")]
public ActionResult GetReport(int month, int day)
{
    var myDate = new MyDate { Month = month, Day = day };
    // 使用 myDate
}

使用 IParsable

在 .Net 7 中,可以直接让 MyDate 实现 IParsable 接口,然后在 route 中绑定 “report/{myDate}”。这样 MyDate 就能直接从 route 上绑定,省去了手动实例化的步骤。

下面是一个示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyDate : IParsable<MyDate>
{
    public int Month { get; set; }
    public int Day { get; set; }

    public void Parse(string input)
    {
        var parts = input.Split('-');
        Month = int.Parse(parts[0]);
        Day = int.Parse(parts[1]);
    }

    public static MyDate Parse(string s, IFormatProvider? provider)
    {
        var date = new MyDate();
        date.Parse(s);
        return date;
    }

    public static bool TryParse(string? s, IFormatProvider? provider, out MyDate result)
    {
        try
        {
            result = Parse(s, provider);
            return true;
        }
        catch
        {
            result = default;
            return false;
        }
    }
}

[HttpGet("report/{myDate}")]
public ActionResult GetReport(MyDate myDate)
{
    // myDate 已经被正确地绑定
}

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在 .Net 7 中将 Query 绑定到数组
在 .Net 7 中,我们可以通过绑定数组的方式来接收来自查询字符串的参数。这样就不需要再使用逗号分隔的字符串来获取参数了。
newbe36524
2023/08/23
1750
使用C# 11的静态接口方法改进 面向约定 的设计
C# 11带来了一个我期待已久的特性——接口方法。我们知道接口是针对契约的定义,但是一直以来它只能定义一组“实例”的契约,而不能定义类型(的静态成员)的契约,因为定义在接口中的方法只能是实例方法。由于缺乏针对“类型契约”的支持,我们在设计一些框架或者类库的时候,只能采用“按照约定”的设计,比如ASP.NET Core Minimal API针对参数的绑定就是一个典型的案例。以如下这个简单的应用为例,我们采用Minimal API的形式注册了一个针对根地址“/”的路由,作为处理器的委托的输出和输出都是我们自定义的Point对象。
蒋金楠
2022/12/09
7000
使用C# 11的静态接口方法改进 面向约定 的设计
ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
借助路由系统提供的请求URL模式与对应终结点之间的映射关系,我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理。ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的,它们在ASP.NET平台上具有举足轻重的地位,MVC和gRPC框架,Dapr的Actor和发布订阅编程模式都建立在路由系统之上。Minimal API更是将提升到了前所未有的高度,是我们直接在路由系统基础上定义REST API。(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2022/09/19
7750
ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
javascript获取当前系统时间代码_获取当前系统时间
大家好,又见面了,我是你们的朋友全栈君。 JavaScript 获取当前时间time 开发常用时间笔记 JS获取当前时间 Js获取当前日期时间及其它操作 ** 谨记要懂得经常在控制台输出结果 **
全栈程序员站长
2022/11/09
18.9K0
【IOS】IOS开发问题解决方法索引(五)
ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发。
江中散人_Jun
2022/03/08
9260
C# 结合 JavaScript 对 Web 控件进行数据输入验证
在 Web 应用的录入界面,数据验证是一项重要的实现功能,数据验证是指确认 Web 控件输入或选择的数据,是否满足数据表数据约束,是否满足应用程序所需要数据约束规则。建立数据库约束可以满足数据验证的应用,但在实际的应用中,我们建议还是在更新信息到数据库前,在应用中执行数据验证,这样可减少错误录入,减少应用程序与数据库之间频繁通信造成的服务器压力。通过有效的数据验证,可以确认写入数据表中的数据是有效且符合预期的。本文我们将介绍如何通过C# 后端及JavaScript 前端对 Web 控件进行数据输入有效性的验证。
初九之潜龙勿用
2024/06/20
1680
C# 结合 JavaScript 对 Web 控件进行数据输入验证
ASP.NET Core路由中间件[1]: 终结点与URL的映射
借助路由系统提供的请求URL模式与对应终结点(Endpoint)之间的映射关系,我们可以将具有相同URL模式的请求分发给应用的终结点进行处理。ASP.NET Core的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的,它们在ASP.NET Core平台上具有举足轻重的地位,因为ASP.NET Core MVC框架就建立在这个中间件之上。可以将一个ASP.NET Core应用视为一组终结点的组合,所谓的终结点可以理解为能够通过HTTP请求的形式访问的远程服务。每个终结点通过RequestDelegate对象来处理路由过来的请求。ASP.NET Core的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件来实现的,这两个中间件类型都定义在NuGet包“Microsoft.AspNetCore.Routing”中。为了使读者对实现在RouterMiddleware的路由功能有一个大体的认识,下面先演示几个简单的实例。
蒋金楠
2021/01/05
9760
dart系列之:在dart中使用数字和字符串
要想熟悉一种语言,最简单的做法就是熟悉dart提供的各种核心库。dart为我们提供了包括dart:core,dart:async,dart:math,dart:convert,dart:html和dart:io这几种常用的库。
程序那些事
2021/11/24
1.2K0
netcore无线路由器_netcore路由器怎么设置
大家好,又见面了,我是你们的朋友全栈君。 IdentityServer里有各种Endpoint,如TokenEndpoint,UserInfoEndpoint,Authorize Endpoin
全栈程序员站长
2022/09/23
3.2K0
ASP.NET Web API编程——模型验证与绑定
1.模型验证 使用特性约束模型属性 可以使用System.ComponentModel.DataAnnotations提供的特性来限制模型。 例如,Required特性表示字段值不能为空,Range特性限制数值类型的范围。 对实体类使用特性后,可以使用ModelState.IsValid来判断验证是否通过。 例: 实体: public class DataModel { public int Id { get; set; } public string Field1Nam
甜橙很酸
2018/04/18
3.1K0
ASP.NET Web API编程——模型验证与绑定
ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的。如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间件的意义在于实现请求路径与对应HttpHandler之间的映射关系。对于传递给RouterMiddleware中间件的每一个请求,它会通过分析请求URL的模式并选择并提取对应的HttpHandler来处理该请求。除此之外,请求的URL还会携带相应参数,该中间件在进行路由解析过程中还会根据生成相应的路由参数提供给
蒋金楠
2018/03/27
1.4K0
ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
超轻量无依赖的日期时间控件!
Pikaday不依赖于任何 Javascript 库,且文件大小小于 5K。不仅轻量,而且功能也十分强大。
程序员老鱼
2022/12/22
3K0
超轻量无依赖的日期时间控件!
C# 数据类型转换 显式转型、隐式转型、强制转型
显式转型:有可能引发异常、精确度丢失及其他问题的转换方式。需要使用手段进行转换操作。
痴者工良
2021/04/26
1.2K0
ASP.NET WebAPI 中的参数绑定
当 WebAPI 调用 Controller 上的方法时, 必须为其参数赋值, 这个过程就是参数绑定。 本文介绍 WebAPI 如何绑定参数, 以及如何进行自定义。
beginor
2020/08/10
2.7K0
Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html。
aehyok
2018/08/31
1.4K0
Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
.NET 零开销抽象指南-hez2010
2008 年前后的 Midori 项目试图构建一个以 .NET 为用户态基础的操作系统,在这个项目中有很多让 CLR 以及 C# 的类型系统向着适合系统编程的方向改进的探索,虽然项目最终没有面世,但是积累了很多的成果。近些年由于 .NET 团队在高性能和零开销设施上的需要,从 2017 年开始,这些成果逐渐被加入 CLR 和 C# 中,从而能够让 .NET 团队将原先大量的 C++ 基础库函数用 C# 重写,不仅能减少互操作的开销,还允许 JIT 进行 inline 等优化。
InCerry
2022/11/14
6810
日期格式转换
没有人见过风的模样,每当树枝摇曳,水波涟漪或浮云飘过,我们才知道风一直都在从未离开!
栖西
2023/10/17
6460
日期格式转换
MVC5+EasyUI+EF6增删改查以及登录登出的演示
创建StudentController、 及Index视图, 在Index上按F5运行
明志德道
2023/10/21
2860
MVC5+EasyUI+EF6增删改查以及登录登出的演示
JeDate的使用
1 先导入相应的jar <link type="text/css" rel="stylesheet" href="${ctxPath}/static/js/jeDate/jedate/skin/jedate.css"/> <script type="text/javascript" src="${ctxPath}/static/js/jeDate/jedate/dist/jedate.min.js"></script> <script type="text/javascript" src="${ctxP
用户5927264
2019/08/01
7680
.NET生成MongoDB中的主键ObjectId
  因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键为了返回或者通过主键查询创建的业务,像EF中我们可以生成Guid来,本来想着要不要实现一套MongoDB中ObjectId的,结果发现网上各种各样的实现都有,不过好在阅读C#MongoDB驱动mongo-csharp-driver代码的时候发现有ObjectId.GenerateNewId()的方法提供,我们可以直接调用即可,不需要我们在花费多余的时间设计重写了。
追逐时光者
2023/03/24
1.4K0
.NET生成MongoDB中的主键ObjectId
推荐阅读
相关推荐
如何在 .Net 7 中将 Query 绑定到数组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验