Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决viewstate无效的问题_C#_Asp.net_Webforms - Fatal编程技术网

C# 如何解决viewstate无效的问题

C# 如何解决viewstate无效的问题,c#,asp.net,webforms,C#,Asp.net,Webforms,我用C#在ASP.NET(Framework 4)中开发了一个web应用程序,并部署在一个外部服务器上。当我检查服务器的日志时,会定期记录无效的ViewState异常。为了解决这个问题,我尝试了很多解决方案,但没有一个对我有效。出于安全原因,我不想在web.config中将enableviewstatemac属性设置为false。(可能将此设置为false将解决此问题。) 即使对于包含非常少量控件的页面,也会出现此错误 错误描述/堆栈跟踪: Application_Error | Invalid

我用C#在ASP.NET(Framework 4)中开发了一个web应用程序,并部署在一个外部服务器上。当我检查服务器的日志时,会定期记录无效的ViewState异常。为了解决这个问题,我尝试了很多解决方案,但没有一个对我有效。出于安全原因,我不想在web.config中将enableviewstatemac属性设置为false。(可能将此设置为false将解决此问题。)

即使对于包含非常少量控件的页面,也会出现此错误

错误描述/堆栈跟踪:

Application_Error | Invalid viewstate. 
Client IP: [IP]
Port: 26824
Referer: [URL with parameter]
Path: /page.aspx
User-Agent: Mozilla/5.0 (Linux; Android 8.1.0; SAMSUNG SM-G610F Build/M1AJQ) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/7.4 Chrome/59.0.3071.125 Mobile Safari/537.36
ViewState: /wEPDwUKMTU0MjgwMzYxMg8WAh4HTWVzc2FnZQULbWFsaS1icmlkZXMWAmYPZBYCAgMPZBYCAgEPZBYEAgEPDxYCHgRUZXh0BQZCcmlkZXNkZAIDDxQrAAIPFgQeC18hRGF0YUJvdW5kZx4LXyFJdGVtQ291bnQClQFkZBYCZg9kFioCAQ9kFgICAQ9kFgICAQ9kFg5mD2QWBGYPZBYEZg8VAQ9QaG90b3MvTUc4MC5qcGdkAgEPZBYCAgEPZBYCZg8VAQRNRzgwZAICD2QWAmYPFQEKMTk5Ni0xMC0wMmQCAQ9kFgICAQ9kFgJmDxUBBzVmdCAzaW5kAgIPZBYCAgEPZBYCZg8VAQdEaXBsb21hZAIDD2QWAgIBD2QWAmYPFQEiRGlwbG9tYShDaXZpbCksICBBdXRvIENhZCwgM0RTIE1heGQCBA9kFgICAQ9kFgJmDxUBDE5vdCBFbXBsb3llZGQCBQ9kFgICAQ9kFgJmDxUBDE5vdCBFbXBsb3llZGQCBg9kFgJmD2QWAgIBDw8WAh4LUG9zdEJhY2tVcmwFJX4vcHJvZmlsZS1kZXRhaWxzLmFzcHg/cHJvZmlsZWlkPU1HODBkZAICD2QWAgIBD2QWAgIBD2QWDmYPZBYEZg9kFgRmDxUBD1Bob3Rvcy9NRzc5LmpwZ2QCAQ9k...at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose)
尝试1:由配置文件中的一个联机工具生成的已用机器密钥(适用于.Net 4.0的密钥)

代码:


如果可以的话,你应该改用另一种技术,比如ASP.NET MVC,因为ASP.NET WebForms已经过时了。是的,我欢迎并接受你的建议,但我需要更多的时间才能改用其他技术。@JennyO'Reilly没有帮助。我的建议实际上是基于两件事:(1)我觉得你的应用程序相当新/小,这可能是一个不错的选择。(2) 大多数使用WebForms的人并不真正了解ViewState是什么以及它是如何工作的。他们认为他们会,但他们会把它和其他与之无关的事情混在一起。因此,ViewState的问题可能会变得相当棘手。在这种情况下,我总是推荐下面的文章,也许它也能帮助你:@JennyO'Reilly是的,我同意你的观点,因为我的应用程序是新的、小规模的应用程序,而且我对web应用程序开发也比较新。我已经阅读了你们分享的文章,但我甚至不能确定我的问题的原因。问题的原因或原因也可能对我有所帮助,以便我可以相应地搜索解决方案。如果可以,您应该转向其他技术,如ASP.NET MVC,因为ASP.NET WebForms已经过时。是的,我欢迎并接受你的建议,但我需要更多的时间来切换到其他技术。@JennyO'Reilly没有帮助。我的建议实际上是基于两件事:(1)我觉得你的应用程序相当新/小,这可能是一个不错的选择。(2) 大多数使用WebForms的人并不真正了解ViewState是什么以及它是如何工作的。他们认为他们会,但他们会把它和其他与之无关的事情混在一起。因此,ViewState的问题可能会变得相当棘手。在这种情况下,我总是推荐下面的文章,也许它也能帮助你:@JennyO'Reilly是的,我同意你的观点,因为我的应用程序是新的、小规模的应用程序,而且我对web应用程序开发也比较新。我已经阅读了你们分享的文章,但我甚至不能确定我的问题的原因。问题的原因也可能对我有所帮助,以便我能够相应地寻找解决方案。
<machineKey
validationKey='2EEA416CEFC6D6BE856ED57B97FB9CA7DFACE17C073125949A1D682C80A44BB2A
D887DDDC13DBFB0954F1000FEE5757E99693F222F8E28CAA2E6DAB8C4F99E0C'
decryptionKey='877478B2F33A74226ABEF55FDCC1A76E43F1BBEA6241A592'
validation='SHA1' />
<pages enableViewStateMac='true'/>
</system.web>
  <system.web>
    <pages MaxPageStateFieldLength="20"/>
  </system.web>
   void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();

        if (exception != null)
        {
            if (exception is System.Web.HttpException && exception.InnerException is System.Web.UI.ViewStateException)
            {
                Response.Redirect(Request.Url.AbsoluteUri);
                WriteLog("Application_Error", "Invalid viewstate | Redirect to: " + Request.Url.AbsoluteUri);
            }
            else
            {
                WriteLog("Application_Error", exception.InnerException.Message + "|" + exception.StackTrace + "|" + Request.RawUrl);
            }
        }
        // Clear the error from the server
        Server.ClearError();
    }