हम 4.0 फ्रेमवर्क पर चल रहे एएसपी.नेट एमवीसी 3 एप्लिकेशन के 3.5 फ्रेमवर्क का उपयोग करके एएसपी.नेट एमवीसी 2 एप्लिकेशन को अपग्रेड करने में व्यस्त हैं।एएसपी.नेट एमवीसी 3: एचटीटीपी हेडर भेजे जाने के बाद सर्वर हेडर नहीं जोड़ सकता
एक ऐसा पृष्ठ है जो ब्राउज़र बैक बटन का उपयोग करके संपर्क करते समय अपवाद फेंकता है। इस पृष्ठ पर ब्राउज़र बैक बटन का समर्थन करने के लिए हमने एक सिस्टम लागू किया है जो पृष्ठ पर वापस आने पर उस पृष्ठ के परिणामों के लिए अनुरोध करता है। मेरे पास कोई स्पष्ट संकेत तथापि के बाद से मैं इस समस्या को देखने के लिए जहां हमेशा ही त्रुटि
Server cannot append header after HTTP headers have been sent.
स्टैकट्रेस
at System.Web.HttpResponse.AppendHeader(String name, String value)
at System.Web.HttpResponseWrapper.AppendHeader(String name, String value)
at System.Web.Mvc.MvcHandler.AddVersionHeader(HttpContextBase httpContext)
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<BeginProcessRequest>b__2()
at System.Web.Mvc.SecurityUtil.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a()
at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
साथ
कैसे आ HTTP हेडर पहले ही भेजा गया है खोजने के लिए है?
अग्रिम धन्यवाद, IvanL
संपादित करें: मैं नई जानकारी और अंतर्दृष्टि द्वारा जोड़ा जा रहा मैं, जबकि इस समस्या के लिए शिकार प्राप्त की। Asynch नियंत्रक ने जवाबों में से एक का उल्लेख मुझे आश्चर्यचकित कर दिया। जब मैंने पाया कि मैं काम करने के लिए वर्ष MVC2 विधि के लिए निम्नलिखित बदलना पड़ा:
[HttpPost, ValidateInput(false)]
public void SearchResultOverview(SearchResultViewModel model, string searchUrl)
{
if (!string.IsNullOrEmpty(searchUrl))
{
searchUrl = searchUrl.Replace("SearchPartial", "SearchPartialInternal");
//NOTE MVC 3
HttpContext.Server.TransferRequest(searchUrl, true);
//NOTE MVC 2
//System.Web.HttpContext.Current.RewritePath(searchUrl, false);
//IHttpHandler httpHandler = new MvcHttpHandler();
//// Process request
//httpHandler.ProcessRequest(System.Web.HttpContext.Current);
}
}
जब मैं TransferRequest विधि मैंने पाया यह Performs an asynchronous execution of the specified URL and preserves query string parameters.
(http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.transferrequest.aspx)
भी है कि वहाँ एक अपवाद है ऊपर देखा मैंने जो अपवाद पोस्ट किया था, उससे पहले फेंक दिया गया था (जब से मैंने अपवाद को देर से खरीदा था तब से मैं बस इसे छोड़ दिया था)। यह अपवाद है:
The SessionStateTempDataProvider class requires session state to be enabled.
at System.Web.Mvc.SessionStateTempDataProvider.SaveTempData(ControllerContext controllerContext, IDictionary`2 values)
at System.Web.Mvc.TempDataDictionary.Save(ControllerContext controllerContext, ITempDataProvider tempDataProvider)
at System.Web.Mvc.Controller.PossiblySaveTempData()
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
तो मैं यह काम कैसे कर सकता हूं?
ठीक है, मुझे देखने अगर मैं यह मान सकते हैं इस psychicly ... ... ... उम्म .. नहीं .. आप कुछ कोड प्रदान करने के लिए करने जा रहे हैं। आप कौन से शीर्षलेख जोड़ रहे हैं, और कब? –
शायद यह मदद मिलेगी: http://stackoverflow.com/questions/2383169/server-cannot-set-status-after-http-headers-have-been-sent-iis7-5 –
@Mystere मैन: यह बिल्कुल सही बात है। मैं खुद को किसी भी शीर्षलेख में शामिल नहीं कर रहा हूं, ऐसा लगता है कि एमवीसी 2 से एमवीसी 3 में बदलने से यह समस्या उत्पन्न हुई क्योंकि कोड एमवीसी 2 में किसी भी अपवाद के बिना ठीक चलाता है। यदि आप स्टैकट्रैक में देखते हैं तो आप नोटिस करते हैं: 'System.Web.Mvc.MvcHandler.AddVersionHeader (HttpContextBase httpContext) पर जिसका अर्थ है कि एमवीसी स्वयं ही हेडर जोड़ने की कोशिश कर रहा है, लेकिन यह नहीं कर सकता है। मैंने उस प्रश्न का समाधान करने का प्रयास किया जिसे आपने मुझे 'reponse.BufferOutput = true' से जोड़ा है लेकिन यह काम नहीं करता है। मुझे हमेशा यह अपवाद और स्टैकट्रैक प्राप्त होता है। – IvanL