2016-10-05 2 views
3
액세스

된다. 나는 이것을 경로 설정에 추가했다 :푸른 웹 사이트 여단입니다 알려진 경로는 내가 파일을 만들려고 노력하고

routes.MapRoute(
    name: "ApplePay-MacOS", 
    url: ".well-known/apple-developer-merchantid-domain-association", 
    defaults: new { controller = "Home", action = "WellKnownApplePay" }); 

어떤 것이 파일을 내보내는 컨트롤러 동작을 가리킨다.

로컬 IIS 및 IIS Express에서 테스트 할 때 모든 것이 작동하지만 하늘에 업로드하면 점을 허용하지 않습니다. " URL의 문자. 파일을 제거하면 작동하고 파일이 하늘빛에 게시 된 후 파일이 다운로드됩니다. 그게 애플 지불 내 사이트의 요구대로 점으로 작동해야합니다.

답변

5

다른 접근 방식을 사용하여이를 해결할 수있었습니다. 나는 인증서에 대한 라우팅을 작성하려고 중단하고 여기에 피터 도르프의 대답에 따라 디렉토리에 Web.config의 추가 : IIS: How to serve a file without extension?

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <staticContent> 
      <mimeMap fileExtension="." mimeType="text/xml" /> 
     </staticContent> 
    </system.webServer> 
</configuration> 
+1

안녕하세요, Tom이 문제는 파일이 제공되지 않는다는 것입니다. 마침표를 삭제하고 ". well-known /"대신 "well-known /"URL을 만들면 파일이 서버가됩니다. 따라서 알려진 경로에 마침표를 추가하면 하늘색이 파일을 제공하지 않게됩니다. 저것은 그것의 연장을 놓치지 않았다. –

+0

내 대답이 도와 줘서 기뻐요! 나는 라우팅을 우회하고 그냥 파일 시스템에 파일로 남겨두고있다. 그래서 나는 당신과 다른 일련의 문제에 부딪쳤다 고 생각합니다. 내 자신에 대한 답변을 찾고있는 동안 귀하의 질문에 걸쳐 비틀 거리며 내가 물었던 질문에 대한 대답이 아니라는 것을 게시했습니다.) –

+0

이것은 ASP.NET MVC 사이트에서 작동합니까? –

2

내가 답을 발견! 톰의 대답 덕분에.

실제로 웹 구성에 mimemap을 추가하여 문제를 해결할 수 있습니다. 그러나 mimeType = "text/xml"을 넣는 대신 원시 apple-developer-merchantid-domain-association 파일을 제공하고 텍스트로 제공하지 않으려면 mimeType = "application/octet-stream"을 사용해야합니다 하고 싶다).

그래서 대답은 webconfig에서의 system.webServer 노드에이를 추가하는 것입니다

다른 답변에서 언급 한 바와 같이
<staticContent> 
    <mimeMap fileExtension="." mimeType="application/octet-stream" /> 
</staticContent> 
2

, 문제가 IIS와 함께 경로를 처리하는 방식입니다. 그들 안에.

난과 같이 등록 된을 IHttpHandler를 작성하여 ASP.NET MVC에서이 문제를 해결 :

다음이 유사하게 처리되었습니다
<system.webServer> 
    <handlers> 
    <add name="ApplePayMerchantIdDomainAssociation" path=".well-known/apple-developer-merchantid-domain-association" verb="GET" type="MyNamespace.ApplePayMerchantIdDomainAssociationHandler, MyAssembly" resourceType="Unspecified" preCondition="integratedMode" /> 
    </handlers> 
</system.webServer> 

:

의 System.Globalization을 사용하여; using System.Web; using System.Web.Mvc;

namespace MyNamespace 
{ 
    public class ApplePayMerchantIdDomainAssociation : IHttpHandler 
    { 
     public bool IsReusable => true; 

     public void ProcessRequest(HttpContext context) 
     { 
      var wrapper = new HttpContextWrapper(context); 
      ProcessRequest(wrapper); 
     } 

     public void ProcessRequest(HttpContextBase context) 
     { 
      var type = GetType(); 
      var assembly = type.Assembly; 

      string resourceName = string.Format(
       CultureInfo.InvariantCulture, 
       "{0}.apple-developer-merchantid-domain-association", 
       type.Namespace); 

      using (var stream = assembly.GetManifestResourceStream(resourceName)) 
      { 
       if (stream == null) 
       { 
        context.Response.StatusCode = 404; 
       } 
       else 
       { 
        stream.CopyTo(context.Response.OutputStream); 

        context.Response.ContentType = "text/plain"; 
        context.Response.StatusCode = 200; 
       } 
      } 
     } 
    } 
} 

ASP.NET에서 핵심 콘텐츠는 wwwroot에서 바로 정적 콘텐츠로 제공 할 수 있으므로 훨씬 더 귀찮습니다.

관련 문제