Azure网站.well-已知路由变得无法访问

时间:2016-10-05 15:27:43

标签: c# asp.net-mvc azure applepay

我正在尝试制作文件:

.well-known/apple-developer-merchantid-domain-association

可通过我的Azure网站访问。我已将此添加到路由配置中:

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。我需要它来使用点,因为这是苹果支付我的网站所需要的。

6 个答案:

答案 0 :(得分:6)

我能够使用不同的方法解决这个问题。我停止尝试为证书编写路由,并在每个Peter Hahndorf的答案中将web.config添加到目录中:IIS: How to serve a file without extension?

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="style.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <script src="script.js"></script>
</head>
<body>
  <div class="random"></div>
</body>
</html>

答案 1 :(得分:3)

我找到了答案!感谢汤姆的回答。

您确实可以将mimemap添加到Web配置中以解决问题。但不是把mimeType =&#34; text / xml&#34;你需要使用mimeType =&#34; application / octet-stream&#34;提供原始的apple-developer-merchantid-domain-association文件,而不是将其作为文本提供(服务器不想这样做)。

所以答案是将它添加到webconfig中的system.webserver节点:

<staticContent>
    <mimeMap fileExtension="." mimeType="application/octet-stream" />
</staticContent>

答案 2 :(得分:2)

正如其他答案所述,问题是IIS处理路径的方式。在他们中间。

我在ASP.NET MVC中解决了这个问题,编写了一个像这样注册的IHttpHandler:

<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;     使用System.Web;     使用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 Core中,因为你可以直接从wwwroot作为静态内容提供服务,所以事情要早得多。

答案 3 :(得分:1)

对于那些来到这里尝试在Azure Web Apps中创建.well-known文件夹的人来说,这是我的工作:

  1. 使用WinSCP连接到Azure Web App的FTP而不是FileZilla
  2. 直接创建“.well-known” 一个。请注意该文件夹不会显示在FTP客户端
  3. 在WinSCP中选择“转到”选项(右键单击空白区域或使用FTP侧的工具栏),通过键入路径在文件夹内导航:/site/wwwroot/.well-known

答案 4 :(得分:0)

我正在尝试执行与Daniel Haddon原始帖子中所引用的相同的操作,除了使用我当前正在本地进行测试的Azure以外,这是其他原因。我的wwwroot目录结构如下:

wwwroot
    .well-known
        apple-developer-merchantid-domain-association
        web.config
    App_Data
    Content
    css
    js
        app.js
    lib

.well-known-> web.config的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension="." mimeType="application/octet-stream" />
    </staticContent>
  </system.webServer>
</configuration>

我相信这就是上面公认的答案中所描述的。

但是,当我尝试访问https://localhost:5001/.well-known/apple-developer-merchantid-domain-association时,出现HTTP 404错误。

我确认我可以成功访问静态文件,因为https://localhost:5001/js/app.js成功运行。

我还尝试将web.config直接放在wwwroot

不确定我在做什么错。有什么建议吗?

答案 5 :(得分:0)

我的问题

我想将 .well-known/something.json 文件添加到我的 Azure 应用服务(Linux 上的 Web 应用)以进行域验证。但是,虽然我可以在本地 (localhost) 访问该文件,但当我尝试在生产环境中访问该文件时,却得到了一个 404 File Not Found

我发现在部署到 Azure(C# ASP.NET Core、Visual Studio 2019)的过程中,我的项目中位于 wwwroot/.well-known/something.json 下的文件没有上传。

我的解决方案

在我的 Azure 应用服务资源中,我使用 Advanced Tools 项访问 Kudu 容器。在那里,我使用 bash 控制台导航到我网站的 wwwroot 目录:cd site/wwwroot/wwwroot/。我创建了众所周知的文件夹 mkdir .well-known,在其中导航 cd .well-known,然后使用 vi something.json 创建了我的文件。之后文件就可以访问了。