我的网站每天都抛出以下异常,我找不到解决方案。 我在网上做了很少的研究,这是我到目前为止所做的。将以下选项添加到aspx将无法解决问题。
ValidateRequest =“false”EnableEventValidation =“false” ViewStateEncryptionMode =“从不”EnableViewStateMac =“false”
此外,我的推介网址是正确的网址,我不知道它如何重定向两个(相同)参数。我的推荐页面中没有这样的链接。请帮忙。
错误日志
URL : http://www.abcd.com/company-details.aspx?com=asia-pacific-pte-ltd&com=asia-pacific-pte-ltd
referral URL : http://www.abcd.com/companies/asia-pacific-pte-ltd/
Inner Exception Type: System.Web.UI.ViewStateException
Inner Exception: Invalid viewstate. Client IP: 192.162.19.193 Port: 1966 User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; MRA 6.0 (build 6001)) Presto/2.12.388 Version/12.11 ViewState: /wEPDwULLTEyMTAyMTY3NDAPZBYCAgMPZBYOZg8QDxYGHg1EYXRhVGV4dEZpZWxkBQdDb3VudHJ5Hg5EYXRhVmFsdWVGaWVsZAUNQ2xlYW5fQ291bnRyeR4LXyFEYXRhQm91bmRnZBAVCgNBbGwFQ2hpbmEJSG9uZyBLb25nBUluZGlhCUluZG9uZXNpYQhNYWxheXNpYQtQaGlsaXBwaW5lcwlTaW5nYXBvcmUIVGhhaWxhbmQHVmlldG5hbRUKA0FsbAVjaGluYQlob25nLWtvbmcFaW5kaWEJaW5kb25lc2lhCG1hbGF5c2lhC3BoaWxpcHBpbmVzCXNpbmdhcG9yZQh0aGFpbGFuZAd2aWV0bmFtFCsDCmdnZ2dnZ2dnZ2dkZAIBDxAPFgYfAAUISW5kdXN0cnkfAQUOQ2xlYW5fSW5kdXN0cnkfAmdkEBXFAgNBbGwSQWR2YW5jZWQgTWF0ZXJpYWxzC0FkdmVydGlzaW5nCkFlc3RoZXRpY3MLQWdyaWN1bHR1cmUkQWdyaWN1bHR1cmUgLSBBZ3JpY3VsdHVyYWwgTWFjaGluZXJ5G0FncmljdWx0dXJlICYgRm9vZCBQcm9kdWN0cxBBaXItY29uZGl0aW9uaW5nHUFpci1maWx0cmF0aW9uICYgUHVyaWZpY2F0aW9uB0FpcnBvcnQJQWx1bWluaXVtFEFuYWx5dGljYWwgRXF1aXBtZW50GkFuYWx5dGljYWwgSW5zdHJ1bWVudGF0aW9uFUFuYWx5dGljYWwgVGVjaG5vbG9neRZBbmQgSW50ZXJpb3IgRGVzaWduZXJzEUFuaW1hbCBQcm9kdWN0aW9uCEFudGlib2R5KUFwc...
Inner Source:
Exception Type: System.Web.HttpException
Exception: The state information is invalid for this page and might be corrupted.
Stack Trace: at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.HiddenFieldPageStatePersister.Load() at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() at System.Web.UI.Page.LoadAllState() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.exhibition_details_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\0f461847\442b0502\App_Web_bfjqxdef.20.cs:line 0 at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
更新 我通过从下面的链接压缩ViewState来修复错误 http://www.codeproject.com/Articles/14733/ViewState-Compression
并通过将原始方法替换为此来修复Base-64字符数组错误的无效长度。
protected override object LoadPageStateFromPersistenceMedium()
{
string viewState = Request.Form["__VSTATE"];
viewState = viewState.Replace(" ", "+");
int mod4 = viewState.Length % 4;
if (mod4 > 0)
{
viewState += new string('=', 4 - mod4);
}
byte[] bytes = Convert.FromBase64String(viewState);
bytes = Compressor.Decompress(bytes);
LosFormatter formatter = new LosFormatter();
return formatter.Deserialize(Convert.ToBase64String(bytes));
}
感谢大家的帮助:)
答案 0 :(得分:3)
我很抱歉,但您的网站没有任何内容,您需要尽快重新启用EventValidations。
通过发送许多测试an attempt to hack your site,您看到numbers with your ViewState trying to find your hash key。
IP you give have a big list of activity the last few days。
现在,可能导致此错误的替代方法是破坏ViewState。如果你有太大的ViewState,你可以compress it and split it。你也可以disable all the controls that not needed。您还可以添加log to see from inside what's is going on right on a base page。
答案 1 :(得分:0)
是的,它也适合我
这里是vbnet
Compressor.vb
Imports System.IO
Imports System.IO.Compression
Public Class Compressor
Public Shared Function Compress(ByVal data() As Byte) As Byte()
Dim output As MemoryStream = New MemoryStream
Dim gzip As GZipStream = New GZipStream(output, CompressionMode.Compress, True)
gzip.Write(data, 0, data.Length)
gzip.Close()
Return output.ToArray
End Function
Public Shared Function Decompress(ByVal data() As Byte) As Byte()
Dim input As MemoryStream = New MemoryStream
input.Write(data, 0, data.Length)
input.Position = 0
Dim gzip As GZipStream = New GZipStream(input, CompressionMode.Decompress, True)
Dim output As MemoryStream = New MemoryStream
Dim buff() As Byte = New Byte((64) - 1) {}
Dim read As Integer = -1
read = gzip.Read(buff, 0, buff.Length)
While (read > 0)
output.Write(buff, 0, read)
read = gzip.Read(buff, 0, buff.Length)
End While
gzip.Close()
Return output.ToArray
End Function
End Class
并将其粘贴到default.aspx中 它需要
Imports System.IO
Protected Overrides Function LoadPageStateFromPersistenceMedium() As Object
Dim viewState As String = Request.Form("__VSTATE")
Dim bytes() As Byte = Convert.FromBase64String(viewState)
bytes = Compressor.Decompress(bytes)
Dim formatter As LosFormatter = New LosFormatter
Return formatter.Deserialize(Convert.ToBase64String(bytes))
End Function
Protected Overrides Sub SavePageStateToPersistenceMedium(ByVal viewState As Object)
Dim formatter As LosFormatter = New LosFormatter
Dim writer As StringWriter = New StringWriter
formatter.Serialize(writer, viewState)
Dim viewStateString As String = writer.ToString
Dim bytes() As Byte = Convert.FromBase64String(viewStateString)
bytes = Compressor.Compress(bytes)
ClientScript.RegisterHiddenField("__VSTATE", Convert.ToBase64String(bytes))
End Sub