Mvc: APK νŒ¨ν‚€μ§€λŠ” ASP.NET Core MVCμ—μ„œ μ œκ³΅λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 05μ›” 07일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: aspnet/Mvc

λ‚΄ ASP.NET Core MVC ν”„λ‘œμ νŠΈμ—μ„œ .apk νŒŒμΌμ„ μ œκ³΅ν•˜κ³  싢은데 404λ₯Ό λ°˜ν™˜ν•˜λ―€λ‘œ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

VS 2017μ—μ„œ κΈ°λ³Έ ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•œ ASP.NET Core MVC ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€κ³  .apk νŒŒμΌμ„ wwwroot 폴더에 μΆ”κ°€ν•œ λ‹€μŒ /application.apk λ₯Ό μ‚¬μš©ν•˜μ—¬ 접근을 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έ ν…œν”Œλ¦Ώμ—μ„œ app.UseStaticFiles() κ°€ 호좜되기 λ•Œλ¬Έμ— /favicon.ico κ°€ μž‘λ™ν•˜λŠ” λ™μ•ˆ μž‘λ™ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή λ””λ ‰ν† λ¦¬μ˜ λ‹€λ₯Έ 정적 컨텐츠가 μž‘λ™ν•©λ‹ˆλ‹€.

그런 λ‹€μŒ ꡬ성을 λ³€κ²½ν•˜λ €κ³  μ‹œλ„ν•˜κ³  wwwroot ν΄λ”μ—μ„œ 정적 μ½˜ν…μΈ λ₯Ό κ°€μ Έμ˜€κ³  application.apk λ₯Ό ν”„λ‘œμ νŠΈμ˜ 루트 디렉터리( wwwroot μ—μ„œ ν•œ 폴더 μœ„λ‘œ)에 λ„£κ³  λ‹€μŒμ„ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ„ μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈ:

app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory())
});

λ‹€μ‹œ κ²°κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€. 404λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

그런 λ‹€μŒ Web.config νŒŒμΌμ„ λ§Œλ“€κ³  λ‹€μŒ MIME μœ ν˜•μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

<staticContent>
  <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" />
</staticContent>

κ·Έλž˜λ„ .apk νŒŒμΌμ€ μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

그런 λ‹€μŒ Web.config νŒŒμΌμ„ λ§Œλ“€κ³  이 MIME μœ ν˜•μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

web.configλŠ” IISλ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. IISλ₯Ό μ‚¬μš©ν•˜μ—¬ 정적 νŒŒμΌμ„ μ œκ³΅ν•˜μ§€ μ•ŠλŠ” ν•œ 이것은 차이가 μ—†μŠ΅λ‹ˆλ‹€.

λ¬Έμ„œ 에 λͺ…μ‹œλœ λŒ€λ‘œ:

정적 파일 λ―Έλ“€μ›¨μ–΄λŠ” 거의 400개의 μ•Œλ €μ§„ 파일 μ½˜ν…μΈ  μœ ν˜•μ„ μ΄ν•΄ν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ•Œ 수 μ—†λŠ” 파일 ν˜•μ‹μ˜ νŒŒμΌμ„ μš”μ²­ν•˜λ©΄ 정적 파일 미듀웨어가 HTTP 404(찾을 수 μ—†μŒ) 응닡을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

정적 파일 미듀웨어λ₯Ό μ‚¬μš©ν•˜μ—¬ APK νŒŒμΌμ„ μ œκ³΅ν•˜λ €λ©΄ ServeUnknownFileTypes λ₯Ό μΌœκ±°λ‚˜ FileExtensionContentTypeProvider λ₯Ό μ‚¬μš©ν•˜μ—¬ ν™•μž₯자λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

FileExtensionContentTypeProvider λ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”κ°€ ν™•μž₯ μΆ”κ°€(ꢌμž₯)

var provider = new FileExtensionContentTypeProvider();

provider.Mappings[".apk"] = "application/vnd.android.package-archive";

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
    ContentTypeProvider = provider
});

이것은 μ„€λͺ…μ„œμ—λ„ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ .

μ•Œ 수 μ—†λŠ” 파일 ν˜•μ‹ 제곡

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
    ServeUnknownFileTypes = true
});

κ·ΈλŸ¬λ‚˜ λ³΄μ•ˆ μœ„ν—˜μ΄ μžˆμ„ 수 μžˆμœΌλ―€λ‘œ ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ServeUnknownFileTypes λ₯Ό ν™œμ„±ν™”ν•˜λ©΄ λ³΄μ•ˆμƒ μœ„ν—˜ν•©λ‹ˆλ‹€. 기본적으둜 λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. FileExtensionContentTypeProvider λŠ” λΉ„ν‘œμ€€ ν™•μž₯자λ₯Ό 가진 νŒŒμΌμ„ μ œκ³΅ν•˜λŠ” 것보닀 μ•ˆμ „ν•œ λŒ€μ•ˆμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

이것은 μ„€λͺ…μ„œμ—λ„ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ .

λͺ¨λ“  3 λŒ“κΈ€

그런 λ‹€μŒ Web.config νŒŒμΌμ„ λ§Œλ“€κ³  이 MIME μœ ν˜•μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

web.configλŠ” IISλ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. IISλ₯Ό μ‚¬μš©ν•˜μ—¬ 정적 νŒŒμΌμ„ μ œκ³΅ν•˜μ§€ μ•ŠλŠ” ν•œ 이것은 차이가 μ—†μŠ΅λ‹ˆλ‹€.

λ¬Έμ„œ 에 λͺ…μ‹œλœ λŒ€λ‘œ:

정적 파일 λ―Έλ“€μ›¨μ–΄λŠ” 거의 400개의 μ•Œλ €μ§„ 파일 μ½˜ν…μΈ  μœ ν˜•μ„ μ΄ν•΄ν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ•Œ 수 μ—†λŠ” 파일 ν˜•μ‹μ˜ νŒŒμΌμ„ μš”μ²­ν•˜λ©΄ 정적 파일 미듀웨어가 HTTP 404(찾을 수 μ—†μŒ) 응닡을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

정적 파일 미듀웨어λ₯Ό μ‚¬μš©ν•˜μ—¬ APK νŒŒμΌμ„ μ œκ³΅ν•˜λ €λ©΄ ServeUnknownFileTypes λ₯Ό μΌœκ±°λ‚˜ FileExtensionContentTypeProvider λ₯Ό μ‚¬μš©ν•˜μ—¬ ν™•μž₯자λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

FileExtensionContentTypeProvider λ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”κ°€ ν™•μž₯ μΆ”κ°€(ꢌμž₯)

var provider = new FileExtensionContentTypeProvider();

provider.Mappings[".apk"] = "application/vnd.android.package-archive";

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
    ContentTypeProvider = provider
});

이것은 μ„€λͺ…μ„œμ—λ„ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ .

μ•Œ 수 μ—†λŠ” 파일 ν˜•μ‹ 제곡

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
    ServeUnknownFileTypes = true
});

κ·ΈλŸ¬λ‚˜ λ³΄μ•ˆ μœ„ν—˜μ΄ μžˆμ„ 수 μžˆμœΌλ―€λ‘œ ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ServeUnknownFileTypes λ₯Ό ν™œμ„±ν™”ν•˜λ©΄ λ³΄μ•ˆμƒ μœ„ν—˜ν•©λ‹ˆλ‹€. 기본적으둜 λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. FileExtensionContentTypeProvider λŠ” λΉ„ν‘œμ€€ ν™•μž₯자λ₯Ό 가진 νŒŒμΌμ„ μ œκ³΅ν•˜λŠ” 것보닀 μ•ˆμ „ν•œ λŒ€μ•ˆμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

이것은 μ„€λͺ…μ„œμ—λ„ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ .

쒋은 μ„€λͺ…. κ°μ‚¬ν•©λ‹ˆλ‹€.

연락 ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. κ·€ν•˜κ°€ μ œκΈ°ν•œ μ§ˆλ¬Έμ— λŒ€ν•œ 닡변이 λ˜μ—ˆλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€. μ—¬μ „νžˆ 토둠을 계속할 ν•„μš”κ°€ μžˆλ‹€κ³  μƒκ°λ˜λ©΄ 자유둭게 토둠을 λ‹€μ‹œ μ—΄κ³  μ˜κ²¬μ„ μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰