2009-11-16 12 views
10

क्या सभी "सामान्य" विचार निर्दिष्ट करने का कोई आसान तरीका है एएसपी.नेट एमवीसी ऐप Content-Type में जोड़ा गया है? View() में ओवरराइड की कमी है जो आपको Content-Type, और ActionResult निर्दिष्ट करने की अनुमति देता है और दोस्तों को कुछ भी बेनकाब नहीं लगता है। प्रेरणा स्पष्ट रूप से "सही" एन्कोडिंग प्रकार का अनुमान लगाने वाले इंटरनेट एक्सप्लोरर के आसपास काम करने के लिए है, जिसे मैं बदले में यूटीएफ -7 एक्सएसएस हमलों से बचने के लिए करना चाहता हूं।सभी एएसपी.नेट एमवीसी HTTP प्रतिक्रियाओं को "वर्णसेट" जोड़ना

उत्तर

20

शायद यह आपके web.config में जादू करेगा?

<configuration> 
    <system.web> 
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> 
    </system.web> 
</configuration> 
+2

+1; मुझे यह सुझाव मेरे सुझाव से बेहतर लगता है, हालांकि मुझे विश्वास है कि दोनों काम करेंगे। –

+1

बस संदर्भ के लिए, दोनों अनुरोधों का डिफ़ॉल्ट एन्कोडिंग और प्रतिक्रिया एन्कोडिंग utf-8 है वैसे भी। [एमएसडीएन] देखें (http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx) – Appetere

+0

[एमएसडीएन] के अपडेटेड लिंक (http://msdn.microsoft.com/en-gb/library/hy4kkhe0 (v = vs.100) .aspx) – Liam

2

आप इसे के लिए एक विशेषता लिख ​​सकते हैं:

public class CharsetAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8"; 
    } 
} 

यह थोड़ा होशियार बनाने के लिए स्वतंत्र महसूस, लेकिन यह सामान्य विचार है। इसे अपने बेस कंट्रोलर क्लास में जोड़ें और आपका पूरा ऐप कवर किया गया है।

+0

अगर मैं एकीकृत पाइपलाइन मोड में चल रहा था तो यह बहुत अच्छा काम करेगा, लेकिन मुझे विश्वास नहीं है कि मुझे आईआईएस 6 और इससे पहले हेडर के साथ मिलकर जाने की अनुमति है, क्या मैं हूं? –

+0

आप निश्चित रूप से उन्हें जोड़ सकते हैं; हमने इसका परीक्षण किया है, और यह काम करता है। हालांकि, मैंने मौजूदा हेडर को संशोधित करने की कोशिश नहीं की है। इसे आजमा कर देखें; परीक्षण करना आसान है। –

0

MVC 5 में इस चाल कर सकते हैं:

public class ResponseCharset : ActionFilterAttribute 
{ 
    private string Charset; 

    public ResponseCharset(string charset = "utf-8") { 
     Charset = charset; 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext filterContext) 
    { 
     filterContext.Response.Content.Headers.ContentType.CharSet = Charset; 
    } 
} 

उपयोग:

public class OrderDetailsController : ApiController 
{ 
    [ResponseCharset("utf-8")] // can be windows-1251 etc. 
    public Object Get(string orderId) 
    { 
     // .... 
    } 
} 

@ क्रेग-stuntz के विचार के आधार पर।

बेशक आपको यह सुनिश्चित करने की ज़रूरत है कि आप सही प्रतिक्रिया एन्कोडिंग दें यानी सामग्री के एन्कोडिंग को उस पर मेल खाना चाहिए, जो ResponseCharset विशेषता में निर्दिष्ट है।

यह मुझे बहुत मदद करता है जब मैं क्रोम के साथ कुछ एमवीसी कोड का परीक्षण कर रहा था, क्योंकि यह स्वीकृति हेडर में एन्कोडिंग निर्दिष्ट नहीं करता है।

संबंधित मुद्दे