ASP.NET Core中怎么实现Url rewrite功能
我们可以使用ASP.NET Core的中间件来实现Url rewrite功能,下面我们定义一个中间件ReplaceQueryStringMiddleware来替换Http请求中的Url参数即QueryString,这相当于就是要用到以前ASP.NET的Url rewrite功能。
中间件ReplaceQueryStringMiddleware类:
public class ReplaceQueryStringMiddleware
{
private readonly RequestDelegate next; public ReplaceQueryStringMiddleware(RequestDelegate next)
{
this.next = next;
} public async Task Invoke(
Microsoft.AspNetCore.Http.HttpContext context)
{
var request = context.Request;
var queryString = request.QueryString.Value; if (!string.IsNullOrWhiteSpace(queryString))
{
//如果这里给context.Request.QueryString或context.Request.Path重新赋值,相当于就是Url rewrite了
request.QueryString = new QueryString("?demoKey=demoValue");//注意前面要加上问号,否者会报异常 } await next.Invoke(context);
}
}
中间件ReplaceQueryString的扩展类ReplaceQueryStringMiddlewareExtension:
public static class ReplaceQueryStringMiddlewareExtension
{
public static void UseReplaceQueryString(this IApplicationBuilder app)
{
app.UseMiddleware<ReplaceQueryStringMiddleware>();
}
}
Startup类的Configure方法中启用ReplaceQueryString中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//启用ReplaceQueryString中间件
app.UseReplaceQueryString(); //因为我们在app.UseMvc之前调用了app.UseReplaceQueryString将URL的QueryString替换了,所以下面使用app.UseMvc后,在MVC Controller中用Request.QueryString读到的将会是替换后的"?demoKey=demoValue"
//同样如果在app.UseReplaceQueryString中更改了context.Request.Path的值,那么在下面app.UseMvc后,MVC读到的Request.Path也是更改后新的Url值,这会导致MVC根据新的Url来调用不同的Controller和Action,实现了Url rewrite的功能
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
}); }
效果:

此外,如果是一些简单的Url rewrite,那么直接在Startup类的Configure方法中用ASP.NET Core自带的中间件app.UseRewriter即可。
ASP.NET Core中怎么实现Url rewrite功能的更多相关文章
- 在Asp.Net Core中使用中间件保护非公开文件
在企业开发中,我们经常会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员可以查看. 就这样一个场景,用户上传的文件只能有三种人看得见(能够访问) ...
- ASP.NET Core中使用表达式树创建URL
当我们在ASP.NET Core中生成一个action的url会这样写: var url=_urlHelper.Action("Index", "Home"); ...
- 在ASP.NET Core中使用百度在线编辑器UEditor
在ASP.NET Core中使用百度在线编辑器UEditor 0x00 起因 最近需要一个在线编辑器,之前听人说过百度的UEditor不错,去官网下了一个.不过服务端只有ASP.NET版的,如果是为了 ...
- ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图
原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证
注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...
- ASP.NET Core中显示自定义错误页面
在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白. 如果在 Startup.cs 的 Configure() 中加上 app. ...
- 初探CSRF在ASP.NET Core中的处理方式
前言 前几天,有个朋友问我关于AntiForgeryToken问题,由于对这一块的理解也并不深入,所以就去研究了一番,梳理了一下. 在梳理之前,还需要简单了解一下背景知识. AntiForgeryTo ...
- ASP.NET Core中的OWASP Top 10 十大风险-失效的访问控制与Session管理
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...
随机推荐
- Redis数据类型及常用命名总结
Redis数据类型: Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 1.String(字符串) ...
- JavaScript有限状态机实现方式
阮一峰博客 http://www.ruanyifeng.com/blog/2013/09/finite-state_machine_for_javascript.html 开源实现库(javascri ...
- elastic job 动态设置定时任务
1. 版本 <!-- import elastic-job lite core --> <dependency> <groupId>com.dangdang< ...
- javaScript删除对象、数组中的null、undefined、空对象、空数组方法
这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题.为了兼具所有的种类类型,封装了方法,代码如下: let obj = ...
- 表格 滚动条 (tbody部分滚动)
本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 html <table> <thead> < ...
- echarts 表格与 div 之间 空白的设置
一. options 图表选项,包含图表实例任何可配置选项: 公共选项 , 组件选项 , 数据选项 {Object} grid 二. grid 直角坐标系内绘图网格 名称 默认值 描述 {number ...
- MySQL创建子视图并查看的时候,字符集报错问题
进入命令行模式, 如果MySQL数据库已经安装好,可以使用下列SQL命令查看MySQL当前的字符集设置: mysql> show variables like 'character_set_%' ...
- 删除SVN版本信息 .svn文件夹
环境:MyEclipse.Windows 问题描述: 在MyEclipse中当我们需要将一个文件夹(包含若干文件或嵌套文件夹)拷贝到另一个文件夹时,此时文件内容虽然拷贝过去了,但其下面的 .svn文件 ...
- Visual C++编程实现摄像头视频捕捉
原文:http://blog.csdn.net/nemojiang/article/details/653033?locationNum=7&fps=1 前言 DirectShow是微软公司提 ...
- c windows控制台输出颜色文字
#include <windows.h> //设置文字颜色void SetColor(int ForgC){ WORD wColor; //We will need this handle ...