首页 新闻 会员 周边 捐助

asp.net core 中使用 AddIISUrlRewrite 时遇到 null 引用问题

0
悬赏园豆:30 [已解决问题] 解决于 2019-06-23 21:42

在一个 asp.net core 3.0 项目中使用 IIS 的 url 重写规则,下面2种写法都会引发 null 引用异常,请问如何解决?

写法1:

var rewriteOptions = new RewriteOptions();
using (var sr = new StreamReader("Config/rewriteRules.config"))
{
    rewriteOptions.AddIISUrlRewrite(sr);
}

写法2:

var rewriteOptions = new RewriteOptions();
rewriteOptions.AddIISUrlRewrite(env.ContentRootFileProvider, 
    "Config/rewriteRules.config");

null 引用异常:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(RewriteOptions options, TextReader reader, Boolean alwaysUseManagedServerVariables)
dudu的主页 dudu | 高人七级 | 园豆:29843
提问于:2019-06-23 20:39
< >
分享
最佳答案
0

查看 Microsoft.AspNetCore.Rewrite 源码中的 UrlRewriteFileParser 实现,发现出现这个问题是由于 rewriteRules.config 中少了 <rewrite> 根元素,加上后就好了。

public IList<IISUrlRewriteRule> Parse(TextReader reader, bool alwaysUseManagedServerVariables)
{
    var xmlDoc = XDocument.Load(reader, LoadOptions.SetLineInfo);
    var xmlRoot = xmlDoc.Descendants(RewriteTags.Rewrite).FirstOrDefault();

    if (xmlRoot == null)
    {
        return null;
    }

    //...
}

但上面的实现代码中直接返回 null 不是一个好的做法。

dudu | 高人七级 |园豆:29843 | 2019-06-23 21:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册