解決中文地址Uri.IsWellFormedUriString返回false

數字和大小寫字母都ok,但是中文地址就會有問題

public bool IslocalURL(string url)
        {
            if (string.IsNullOrEmpty(url))
            {
                return false;
            }
            Uri absoluteUri;
            if (Uri.TryCreate(url, UriKind.Absolute, out absoluteUri))
            {
                return String.Equals(this._httpContext.Request.Url.Host, absoluteUri.Host, StringComparison.OrdinalIgnoreCase);
            }
            else
            {
                bool isLocal = !url.StartsWith("http:", StringComparison.OrdinalIgnoreCase)
                    && !url.StartsWith("https:", StringComparison.OrdinalIgnoreCase)
                    && Uri.IsWellFormedUriString(url, UriKind.Relative);
                return isLocal;
            }
        }

  解決辦法:

利用 Uri.EscapeUriString(String) Method

Converts a URI string to its escaped representation.

public static string EscapeUriString (string stringToEscape);

.

  //解决中文url 不会触发301
            pageUrl = Uri.EscapeUriString(pageUrl);

            //301 (permanent) redirection
            if (webHelper.IslocalURL(pageUrl))
            {
                filterContext.Result = new RedirectResult(pageUrl, true);
            }

  參考:

https://docs.microsoft.com/zh-cn/dotnet/api/system.uri?redirectedfrom=MSDN&view=netframework-4.7.2

原文地址:https://www.cnblogs.com/0banana0/p/10170272.html

时间: 2024-11-04 01:07:33

解決中文地址Uri.IsWellFormedUriString返回false的相关文章

判断是否含有中文,包含返回true,不包含返回false

/** * 功能:判断是否含有中文,包含返回true,不包含返回false */ function isChina(s) { var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; if (!patrn.exec(s)) { return false; } else { return true; } }

解決BufferedReader BufferedWrite 读写UTF-8文件中文乱码

解決BufferedReader读取UTF-8文件中文乱码         File rst01 = new File(context.getRealPath("/")+"zljb0.html");         File rst02 = new File(context.getRealPath("/")+"zljb.html"); InputStreamReader isr = new InputStreamReader(

關於php接ICBC的支付接口的解決方案

一:背景: 目前項目使用的是php語言開發,需要接入中國工商銀行的ICBC的線上支付接口. 二:遇到的問題:支付時需要對數據簽名,但是銀行那邊不提供php版本的程序,只有java版本的,以下是對接人回復的郵件: 三:思路: 目前大概有3種解決方案: 1.  通過使用一個叫 php-java-bridge 的插件,在php中調用java的函數 2. 把java的函數改寫成php版本 3. 在服務器配置javaWeb環境,通過http請求把簽名的參數傳入,從而獲取簽名 四: 具體做法: 我採取的是第

C#からネイティブDLLを呼び出す場合のVSからのデバッグのジレンマを解決する

「C#を使う最大のメリットって.やっぱり.Visual Studioですよね!」って自信を持って言いたいですね. という心境ではあるんですが.私の仕事はどっちかというとC++よりなので.どうしても.DllImportはお友達という側面があります.そうすると.プログラム実行時に. AnyCPUなアセンブリ.exe ネイティブC++.dll みたいな感じになって.要は.AnyCPUなアセンブリがネイティブC++ちゃんを呼び出す構図になるんですが.この構成.64-bitの環境で開発をしていたりすると相

Python編碼格式錯誤解決方案及案例

Python格式錯誤解決方案及案例 這幾天在玩爬蟲,在解析和提取内容時經常出現由於内容格式問題導致出錯,為防止以後出錯,整下一下,以下是這幾天的總結: 1. 特殊符號或表情符號等 背景:爬取一個烹飪教學網站,在用BeautifulSoup解析網頁時報錯: UnicodeEncodeError: 'UCS-2' codec can't encode character '\U0001f44d' in position 0: Non-BMP character not supported in Tk

unicode 的中文字符串,调用 isalnum()返回的是 True ?

描述 Python isalnum() 方法检测字符串是否由字母和数字组成. 语法 isalnum()方法语法: str.isalnum() 返回值 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False 今天看到一个同学,遇到这个问题,于是自己动手测试了一下,看效果: 可以看到我们这里str中输入了一个中文的字符串 但是结果还是为True,what,很多同学就好奇了,为什么嘞. 首先嘞,我们得想想 计算机中是如何存储汉字的 ,计算机中存储汉字的方式是

详解Android中那些酷炫返回方式的实现

Android手机都会有返回键,不管是实体键,还是虚拟键.Android用户主要也都是通过这个返回键操控页面返回方式的,不比IOS逼格甚高的只保留一个操作键.这种方式是最普遍的返回方式,还有一种也是比较常见的,那就是页面内部自己响应.绝大多数APP每个页面的设计图顶部左侧都会有一个返回键图标,偶尔也有奇葩的设计放在底部左侧,点击这个图标即finish掉当前页面.简单的介绍完了最常见的两种方式,下面为大家介绍两种更友好的交互方式. 拿大家比较常用的三款社交软件的交互来说.腾讯微博的返回方式除去上述

如何创建不同pendingintent所以filterEquals()返回false?

我AlarmManager设置重复的意图,但它有一点trouble所以希望有人可以帮助. 总结 有2个正在申请的意图.a个运行在1000和其他每天跑2000.each包含从数据库中以供识别之行ID.该代码如下所示: Intent i = new Intent(mContext, ScheduleReceiver.class); i.putExtra(RuleDBAdapter.KEY_ROWID, (int)taskId); PendingIntent pi =PendingIntent.get

解決Spring的定時器如何獲取項目的部署路徑

最近在寫項目的時候遇到在Spring的定時器下需要用到項目路徑的,但是在定時器中,沒法獲取request或者session不能直接調用他的方法直接獲得,那麼怎麼解決這樣的問題呢?其實還是有辦法的,正所謂條條道路通羅馬,spring這麼強大怎麼可能被這點小事給整過去. 我舉個例子吧,加入我們需要些這麼個定時器,他的需求如下:每天進行一次項目生成的一次性的文件進行刪除 那麼定時器代碼如下: package com.smartsoft.quartz; import java.io.File; impo