我正在尝试制作文件:
.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。我需要它来使用点,因为这是苹果支付我的网站所需要的。
答案 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文件夹的人来说,这是我的工作:
答案 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
创建了我的文件。之后文件就可以访问了。