2016-10-05 13 views
3
アクセスできない

になります。これをルートに追加しましたconfig:Azureのウェブサイト.well知られているルートは、私は、ファイルを作成しようとしています

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

これは、ファイルを送信するコントローラのアクションを示しています。

ローカルのIISとIIS Expressでテストするとすべて正常に動作しますが、ファイルをazureにアップロードすると、ドットが受け入れられません。 URL内の文字。私はそれを削除すると、それは動作し、ファイルがazureに公開された後にダウンロードされます。アップルが自分のサイトに支払う必要があるものとして、ドットで作業する必要があります。

答えて

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

Hey Tom、ファイルが配信されないという問題はありません。期間を削除し、 "。well-known /"ではなく "well-known /"にすると、ファイルはサーバーになります。だから問題は、.well-既知のパスにピリオドを追加すると、紺碧がファイルを提供していないということです。その拡張機能が欠落しているわけではありません。 –

+0

嬉しい私の答えが助けになりました!私は経路指定を迂回し、ファイルシステムにファイルとして残しています。だから私はあなたとは違った問題に遭遇したと思う。私は自分自身の答えを探している間あなたの質問を見つけたと私はあなたが尋ねた質問への答えではないことを認めた投稿) –

+0

これは、ASP.NET Mvcのサイトで動作しますか? –

2

私は答えを見つけました!トムの答えがありがとう。

本当に問題を解決するために、Web設定に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がでパスを処理する方法です。それらの中に。

が、私はそうのように登録されたIHTTPハンドラを記述することによって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から直接静的コンテンツとして提供することができるので、より多くの方が簡単です。

関連する問題