IIS 7的UrlReferrer抛出异常。

4

当我获取引荐网址时,IIS 7会抛出异常。我的代码如下:

var referrer = Request.UrlReferrer == null ? null : Request.UrlReferrer.AbsoluteUri;

应用程序抛出ArgumentException并显示以下错误信息:

"值不在预期范围内。"

IIS 6没有问题。

当使用"Response.Redirect"导航到页面时,会发生此异常。

根据当前用户的角色,应用程序主页具有一个Response.Redirect方法。用户主页会引发此异常。

如何在IIS 7中获取Referrer URL。

谢谢。

1个回答

3
当我尝试从请求处理中启动的System.Threading.Task中访问请求对象时,遇到了类似的问题。 我使用任务来减少响应时间 - 在我的情况下,大部分处理可以在请求发送后执行。 也就是说,我有这样的代码:
public ActionResult SomeAction()
{
    new System.Threading.Task(() => {

        // here I used this.Request.UrlReferrer and got weird ArgumenException error

    }).Start();

    return someActionResultThatDoesntRequireProcessing;
}

我已将UrlReferrer(以及其他我需要的this.Request.stuff)提取到一个单独的“闭包”变量中进行延迟处理(我选择了它们具有基本类型):

public ActionResult SomeAction()
{
    var urlReferrerAbs = this.Request.UrlReferrer.AbsoluteUri;
    var clientAddress = this.Request.UserHostAddress;
    // save other stuff from the request object

    new System.Threading.Task(() => {

        // here I used urlReferrerAbs instead of this.Request.UrlReferrer and the error has gone!

    }).Start();

    return someActionResultThatDoesntRequireProcessing;
}

这对我很有效。

所以,在重定向页面之前,我必须获取引荐网址。 - selami
也许,由于重定向后以及切换到另一个线程后,获取所有请求属性的正确上下文可能会丢失。 - LVR
@hanzala,你能详细说明一下是什么解决了你的问题吗?是LVR发布的确切代码吗?谢谢! - Patrick M
我将UrlReferrer作为参数传递给异步方法,没有传递Request对象作为参数。 - selami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接