2017-03-16 21 views
5

मैं एक ASP.NET कोर MVC आवेदन किया है और wwwroot फ़ोल्डर में, मैं "शॉन" और उस फ़ोल्डर में मैं करने के लिए एक exe गिरा दिया गया है कहा जाता है किसी अन्य फ़ोल्डर में जोड़ दिया है कोशिश करते हैं और डाउनलोड:ASP.NET कोर - डाउनलोड .exe रिटर्न 404 त्रुटि

enter image description here

अब अगर मैं पर जाएँ: http://localhost:PORT/Shaun/chromesetup.exe मैं 404 त्रुटि मिली। मैंने नीचे हैंडलर जोड़ने की कोशिश की है लेकिन यह काम नहीं करता है।

<add name="Client exe" path="*.exe" verb="*" modules="StaticFileModule" resourceType="File" /> 

अतिरिक्त जानकारी: कारण मैं ऐसा करने की जरूरत है क्योंकि मैं एक क्लाइंट अनुप्रयोग इस वेबसाइट से कनेक्ट होता है, कि क्लाइंट अनुप्रयोग ClickOnce का उपयोग कर पैक किया जाता है और वेबसाइट के wwwroot में गिरा दिया जाता है, यह पहले काम एमवीसी (प्री कोर) का उपयोग करके और अभी भी करता है, लेकिन कोर के साथ नहीं है।

मैं इसे कैसे ठीक करूं?

+0

ऐसा इसलिए है क्योंकि फाइल एक्सटेंशन द्वारा अनुमति नहीं है: स्थिर फ़ाइल मिडलवेयर अपनी परियोजना के लिए Microsoft.AspNetCore.StaticFiles पैकेज पर निर्भरता को जोड़ने और फिर Startup.Configure से UseStaticFiles विस्तार विधि को फोन करके विन्यस्त किया जा सकता स्टेटिकफाइल हैंडलर मिडलवेयर। –

+0

@JoelHarkes मैं यह कैसे कर सकता हूँ की अनुमति दी (डॉटनैट कोर खुद StaticFileHandlerMiddleware है)? – Smithy

+1

@Smity मैं आप के लिए एक जवाब प्रदान की –

उत्तर

7

अगर यह काम करता है निम्नलिखित की कोशिश करो और मुझे बताओ:

app.UseStaticFiles(new StaticFileOptions 
{ 
    ServeUnknownFileTypes = true, //allow unkown file types also to be served 
    DefaultContentType = "Whatver you want eg: plain/text" //content type to returned if fileType is not known. 
} 

आप देखना चाहते हैं कि यह स्थिर फ़ाइलों को संभालती है StaticFileMiddleware की sourcecode देख सकते हैं।

डिफ़ॉल्ट रूप से FileExtensionContentTypeProvider का उपयोग फ़ाइल नाम एक्सटेंशन के आधार पर जांचने के लिए किया जाता है जो सामग्री प्रकार को एचटीपी प्रतिक्रिया शीर्षकों में वापस करने की आवश्यकता होती है। exe इस सूची में नहीं है।

तो एक और विकल्प इस सूची में Exe जोड़ने के लिए होगा:

var provider = new FileExtensionContentTypeProvider(); 
provider.Mappings.Add(".exe", "application/vnd.microsoft.portable-executable"); //file ext, ContentType 
app.UseStaticFiles(new StaticFileOptions 
{ 
    ContentTypeProvider = provider 
}); 
+0

आपका पहला कोड दोस्त काम करता है, बस अब दूसरा टुकड़ा परीक्षण करने के लिए जा रहा! क्या आप उनके बीच का अंतर जानते हैं? – Smithy

+0

@Smithy यदि आप अपने पाठ को पढ़ने के लिए यह कारण प्रदान करना चाहिए। पहले के लिए डिफ़ॉल्ट रूप सामग्री प्रकार दिया जाता है –

+1

Yepp, दूसरा टुकड़ा के रूप में अच्छी तरह से काम करता है: डी मैं इसे ले कुछ भी और सूची में .exe जोड़ने है और अधिक सुरक्षित वापस आ जाएगी ServerUnknownFileTypes? – Smithy

0

स्थिर फ़ाइलों के लिए आदेश (exe फ़ाइल स्थिर फ़ाइल प्रकार है) में दिखाए जाने के लिए, आप स्थिर जोड़ने के लिए मिडिलवेयर कॉन्फ़िगर करना होगा पाइपलाइन के लिए फाइलें।

public void Configure(IApplicationBuilder app) 
{ 
    app.UseStaticFiles(); 
} 
+1

पहले से ही मिल गया है कि मेरे कोड साथी में जोएल के जवाब मिल गया – Smithy