(ActionContext context) => Task.CompletedTask; } 二、执行IActionResult对象 接下来我们将Action方法返回类型的约束放宽,除了Task和Void...,Action方法的返回类型还可以是IActionResult、TaskIActionResult>和ValueTaskIActionResult>。...如下面的代码片段所示,我们将Action方法FooAsync和Bar的返回类型分别替换成TaskIActionResult>和IActionResult,具体返回的都是一个ContentResult对象...三、IActionResult类型转化 前面的内容对Task方法的返回类型做出了一系列的约束,但是我们知道在真正的MVC框架中,定义在Controller中的Action方法可以采用任意的类型。...我们定义在两个静态只读字段(_taskConvertMethod和_valueTaskConvertMethod)来保存描述这两个泛型方法的MethodInfo对象。
这样的派生类还有常见的JsonResult和ContentResult等,他们都继承了ActionResult,而ActionResult实现了IActionResult接口。...第三行的ActionResult 类型是在ASP.NET Core 2.1 引入的,它支持IActionResult的子类也支持类似string和Book这样的特定类型。...所以图 2中ActionResult 类型返回的结果被加上引号的意思就是结果类型可能是直接返回的IActionResult的子类,也有可能是string和Book这样的特定类型被封装后的ObjectResult...这部分的主要内容有两个,分别是Result Filters的执行和IActionResult的执行。...由图 2可知这两种类型在执行完毕后,都被封装成了ObjectResult,那么ObjectResult在执行的时候又是如何被转换成string和JSON两种格式的呢? 下一章继续这个话题。
在Asp.net Core之前所有的Action返回值都是ActionResult,Json(),File()等方法返回的都是ActionResult的子类。...如果是异步则使用Task。...Ok(); } } IActionResult接口 ActionResult类实现了IActionResult接口所以能用ActionResult的地方都可以使用IActionResult...同样异步的话使用Task包起来做为返回值。...return Ok(); } public async TaskIActionResult> AsyncCall() { await
用于描述定义在Page类型的Action方法),并将对应的Controller类型和方法名称,以及特性路由模板输出来。...采用约定路由的Foo方法虽然只有一个ActionDescriptor,但是注册的4个约定路由有两个与它匹配(两个必要的路由参数“controller”和“action”需要定义在路由模板中),所以它也具有两个终结点...>(VoidActionResult.Instance); } // TaskIActionResult> if (result is TaskIActionResult...(result is IActionResult actionResult) { return ValueTask.FromResult(actionResult...var result = await task; return result is IActionResult actionResult ?
第 5 章 使用 Entity Framework Core 5.4 重构 Controller 和 Action 重构 AuthorController 构造函数重构 public IMapper Mapper...RepositoryWrapper = repositoryWrapper; Mapper = mapper; } IRepositoryWrapper 用于操作仓储类,IMapper 用于处理对象之间的映射关系...获取作者列表重构 [HttpGet] public async TaskActionResult>> GetAuthorsAsync() { var authors...IActionResult> CreateAuthorAsync(AuthorForCreationDto authorForCreationDto) { var author = Mapper.Map...HttpGet] public async TaskActionResult>> GetBooksAsync(Guid authorId) { var books
async TaskIActionResult> Mdi() { return View(); } public async TaskIActionResult...封装到IActionResult中返回给主页面进行加载 其中Controller中的方法返回类型是async Task,也就是整个页面跳转都是在异步中进行的,可以有效的避免页面切换中的卡死效果 4.4...View中的结构和定义 其中View在项目中的定义就是根据Controller中的方法对应,在MVC中要严格按照结构定义[View/Loyout],好处是可以减少代码量,同时使格式统一代码整齐,结构如下...,分别是Large和Small,其中这两种颜色采用注入的方式加载,即可以在程序加载时设置着两种字体的初始值 其他配置 包括中英文、设置标准行高等等可以在程序加载时进行初始化设置,这里不做过多介绍 **总结...net 4.5 如有解决方案程序集无法加载请安装这两个框架
由于排除的属性设置为 NULL 或默认值,而不是保持不变,因此它在编辑方案中无法很好地工作; 因为 Bind 特性将清除未在 某个 参数中列出的字段中的任何以前存在的数据。 一脸懵逼。...ActionResult A default implementation of IActionResult....2, 返回的数据类型 特定类型 IActionResult 类型 ActionResult 类型 Action 的 return ,返回的数据类型必定是上面三种。...类型 响应状态码、Json、重定向、URL 跳转等,属于 IActionResult。...API: [HttpGet("returnaaa")] public async TaskIActionResult> ReturnAAA() {
正文 当我们在使用AspNet Core编写控制器的时候,经常会将一个Action的返回结果类型定义为IActionResult,类似于下面的代码: [HttpGet] public IActionResult...ObjectResult是AspNetCore里面对于一般结果的常用返回类型基类,他继承自IActionResult接口: public class ObjectResult : ActionResult...var actionResult = ConvertToActionResult(mapper, returnValue, executor.AsyncResultType); return actionResult...当然,不是所有的情况下,结果都是返回ObjectResult哦,就如同下面这些情况: 当我们显式返回一个IActionResult的时候 当Action的返回类型为Void,Task等没有返回结果的时候...public interface IActionResult { Task ExecuteResultAsync(ActionContext context); } 每一个具体的IActionResult
使用 在安装完插件后,随便打开一个项目,随便选择一个类,右键就有"询问 Copilot" 菜单: 点击菜单后,下面就会出现一个对话框: 用户可以在对话框进行提问 同时在侧边栏也会多出一个...Copilot 准确的做出了解释,只是使用了英文,我让它使用中文,它不理我。...[HttpGet("{id}")] public async TaskActionResult> GetToDoById(int id) { var todo...在安装时,你需要登录你的 GitHub 帐户和选择你喜欢的语言。 准备工作 我们将使用 Entity Framework Core 和 ASP.NET Core 创建 To-Do 应用程序。...[HttpDelete("{id}")] public async TaskIActionResult> DeleteToDoByIdAsync(int id) { await
模型绑定系统: 从各种源(如路由数据、表单域和查询字符串)中检索数据。 Razor在方法参数和公共属性中向控制器和页面提供数据。 将字符串数据转换为 .NET 类型。 更新复杂类型的属性。...view=aspnetcore-5.0 Web 应用负责检查 ModelState.IsValid 并做出相应响应 if (!...[Remote]:通过在服务器上调用操作方法来验证客户端上的输入。...[Required] [Range] public class Student { [Required] [Range(1,10,ErrorMessage = "id 为 1-10 之间的数字...view=aspnetcore-5.0 特定类型 IActionResult ActionResult 特定类型:最简单的操作返回基元或复杂数据类型(如 string 或自定义对象类型) IActionResult
RssFeedContext context) { } // GET: api/Rss [HttpGet] public ActionResult...} // GET: api/Rss/5 [HttpGet("{id}", Name = "Get")] public ActionResult<RssFeedItem...下载安装 Postman Postman 的下载地址在这里 https://www.getpostman.com/apps, image.png ▲ 选择你需要的平台 Postman 的安装是极简的...如果你是本地 https 的调试,记得在 Postman 里关掉 SSL 证书验证,不然这种自己签署的证书是无法成功完成请求的。...image.png ▲ 无法获取响应 如果你在 Visual Studio 中打了断点,那么现在应该已经进入了断点了: image.png ▲ Visual Studio 中进入断点 于是你就能调试
RssFeedContext context) { } // GET: api/Rss [HttpGet] public ActionResult...} // GET: api/Rss/5 [HttpGet("{id}", Name = "Get")] public ActionResult选择你需要的平台 Postman 的安装是极简的,没有任何设置。当启动后,注册或登录你的个人账号,然后填写一些个性化设置即可。...如果你是本地 https 的调试,记得在 Postman 里关掉 SSL 证书验证,不然这种自己签署的证书是无法成功完成请求的。 ?...▲ 无法获取响应 如果你在 Visual Studio 中打了断点,那么现在应该已经进入了断点了: ? ▲ Visual Studio 中进入断点 于是你就能调试 POST 请求了。
REST(Representational State Transfer)是一种架构风格,用于客户端和服务器之间进行通信。...RESTful API 是基于 HTTP 协议构建的,它强调资源的概念,并通过不同的 HTTP 方法(如 GET、POST、PUT 和 DELETE)来操作这些资源。...HTTP 方法选择:根据操作选择合适的 HTTP 方法。状态码使用:正确地使用 HTTP 状态码来表示操作的结果。错误处理:定义一致的错误处理机制。...HTTP 方法选择使用 GET 来检索信息。使用 POST 来创建资源。使用 PUT 来更新资源。使用 DELETE 来删除资源。...希望这篇教程能帮助你在 C# 中更好地理解和实践 RESTful API 的开发。
同步阻塞会调用导致 线程池饥饿 和响应时间降级。 不要: 通过调用 Task.Wait 或 Task.Result 来阻止异步执行。 在公共代码路径中加锁。...如在进行调用数据读写、I/O 处理和长时间操作的 API 时,存在可用的异步 API。那么务必选择异步 API 。 但是,不要 使用 Task.Run 来包装同步 API 使其异步化。...请参阅 EF 高性能专题 以了解可能提高应用性能的方法: DbContext 池 显式编译的查询 在代码提交之前,我们建议评估上述高性能方法的影响。 编译查询的额外复杂性可能无法一定确保性能提高。...要 在应用程序中包含用于检测和处理导致异常的逻辑。 要 对意外的执行情况抛出或捕获异常。...此时就无法修改 header 了。
Get 方法接口加上 [HttpHead] 来实现对 Head 方法的支持 过滤和搜索的接口需要对参数进行 trim 不应该将接口的返回值都修改为 ApiResponse 类型,应该保留框架的 ActionResult...这些响应并不是通过异常机制处理的,因此常规的异常处理中间件或 UseExceptionHandler 无法捕获和修改这些特定的错误响应。...下面以 JWT 认证为例说明如何自定义 401 和 403 的响应: 配置 JWT 认证以自定义 401 和 403 响应 在 services.AddAuthentication().AddJwtBearer...; } } 最后在接口签名里指定使用的 ModelBinder [HttpGet("{ids}")] public async TaskIActionResult> GetCompanyCollection...[HttpGet("({ids})")] public async TaskIActionResult> GetCompanyCollection( 小结 不知道说啥,现在很少写 C#了,最近.Net9
在本地构建和调试,而无需额外的设置,在云中大规模部署和操作,并使用触发器和绑定集成服务。...从 VS 创建和部署 Azure Function 在 Edi.AzureFunctions 点击右键,选择 Publish 点击 Start,选择 Azure Functions Consumption...如果你已经在 Azure 上创建过一个 Function 应用,则可选择 Select Existing。关于如何从 Azure portal 创建一个 Function 应用,在稍后讨论。 ?...在 Azure Portal 创建 Function 刚才的例子里,我们通过 VS2019 一条龙开发和部署了一个Azure Function,而在实际应用中,通常不会这样操作。...在 Platform features 里进入 Deployment Center ? 代码来源选择 GitHub ? 选择 Kudu 编译 ?
AuthorController 中添加用于创建 Author 的 Action [HttpPost] public IActionResult CreateAuthor(AuthorForCreationDto...GetAuthor 方法的 URL,因此还需要为这个 Action 定义一个路由名称 [HttpGet("{authorId}", Name = nameof(GetAuthor))] public ActionResult...newBook.Id}, newBook); } 同样为 GetBook 方法指定路由名称 [HttpGet("{bookId}", Name = nameof(GetBook))] public ActionResult...BookController 添加 Action [HttpDelete("{bookID}")] public IActionResult DeleteBook(Guid authorId, Guid...configure.ReturnHttpNotAcceptable = true; }); Formatter 是 ASP.NET Core 中用于处理数据输出或输入格式的组件,它分为两类:输出 Formatter 和输入
public class CheckIfMatchHeaderFilterAttribute : ActionFilterAttribute { public override Task...BookController 的 UpdateBookAsync 和 PartiallyUpdateBookAsync 两个方法应用该特性 [HttpPut("{bookId}")] [CheckIfMatchHeaderFilter...] public async TaskIActionResult> UpdateBookAsync(Guid authorId, Guid bookId, BookForUpdateDto updateBook...响应消息头中包含api-supported-versions和api-deprecated-versions这两项 options.ReportApiVersions = true; });... Get() => "Result from v1"; [HttpGet, MapToApiVersion("2.0")] public ActionResult
领取专属 10元无门槛券
手把手带您无忧上云