3

首先我想说:是的,我知道有很多问题与我的相似,但又不一样。

当我在我的开发人员机器上启动我的 12 个站点中的一个时,一切都运行良好,并且在服务器上,其中 11 个站点也可以正常工作。

当我启动第 12 个站点时,它首先工作正常,但是当它导致回发(按钮、带有 AutoPostBack 的 DropDownList 等...)时,我收到以下错误:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[NullReferenceException: Object reference not set to an instance of an object.]
   Infoscreen.Anzeigeeinstellungen.Page_Load(Object sender, EventArgs e) in C:\Users\Krusty\Desktop\Schule\Diplomarbeit\Infoscreen\Infoscreen\Anzeigeeinstellungen.aspx.cs:97
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
   System.Web.UI.Control.LoadRecursive() +70
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3047

路径(C:\Users\Krusty\Desktop\Schule\Diplomarbeit\Infoscreen\Infoscreen\Anzeigeeinstellungen.aspx.cs)是文件在我的开发人员机器上的路径。但为什么??我从未在我的程序中对任何路径进行硬编码,甚至重新创建该站点也不起作用。

我该怎么办?任何提示/提示将不胜感激。

编辑:

91    if (!Page.IsPostBack)
92    { 
93        Response.Cookies["Infoscreen_Anzeigeeinstellungen_Ausgewählte_Abteilung"].Value =  ausgewählte_Abteilung.ToString(); 
94    }
95    else
96    { 
97        ausgewählte_Abteilung = Request.Cookies["Infoscreen_Anzeigeeinstellungen_Ausgewählte_Abteilung"].Value; 
98    }

编辑:

是的,IIS 配置为使用 Cookie

编辑:

解决了!在 VisualStudio2010 Server 中,char 'ä' 有效......
在 IIS7 中它没有......
所以 cookie 永远不会被正确设置并且 get 请求挂起

将 cookie 命名为“Infoscreen_Anzeigeeinstellungen_Ausgewaehlte_Abteilung”,现在可以正常工作

可以关闭

4

1 回答 1

2

正如您已经发现自己但仅供将来参考:

在处理 cookie 的代码中,c# 中允许使用“名称”(使用变音符号),但根据RFC2616,cookie 的令牌必须包含 US-ASCII 字符的子集。

if (!Page.IsPostBack)
    { 
        Response.Cookies["Infoscreen_Anzeigeeinstellungen_Ausgewählte_Abteilung"].Value =  ausgewählte_Abteilung.ToString(); 
    }
    else
    { 
        ausgewählte_Abteilung = Request.Cookies["Infoscreen_Anzeigeeinstellungen_Ausgewählte_Abteilung"].Value; 
    }

因此,如果您的 cookiekey 是基于表单/控件名称生成的,那么一种拥有安全 Cookies 密钥的方法可能是:

static string TokenRFC2616(string key)
{
    const string separators = "()|<>@,;:\\\"/[]?={} ";
    var chars = from ch in key.Normalize(NormalizationForm.FormD)
            where CharUnicodeInfo.GetUnicodeCategory(ch) 
                     != UnicodeCategory.NonSpacingMark &&
                  separators.IndexOf(ch)==-1
            select ch;
    return String.Concat(chars);
}

string cookiekey = TokenRFC2616(
       "Infoscreen_Anzeigeeinstellungen_Ausgewählte_Abteilung");
if (!Page.IsPostBack)
{ 
   Response.Cookies[cookieKey].Value =  ausgewählte_Abteilung.ToString(); 
}
else
{ 
    ausgewählte_Abteilung = Request.Cookies[cookieKey].Value; 
}

(在上面的示例中,cookie 名称将是Infoscreen_Anzeigeeinstellungen_Ausgewahlte_Abteilung

于 2013-10-13T14:25:30.847 回答