使用输入类型=“文件”与ASP.Net和iPad和IIS的Windows集成身份验证
我试图做一个非常枯燥的旧的HTML页面使用input type="file"
上传一个.aspx页面,它们都在启用了Windows集成身份验证(不是匿名)的IIS上(IIS7和IIS8)托管。它适用于桌面版的Chrome,但如果我在iPad上使用Chrome或Safari,我可以登录(通过Windows身份验证)并查看表单,但是如果我选择一个文件并单击发送,它就位于旋转。如果我不要挑选一个文件,它工作正常。如果我从Windows Auth切换到匿名身份验证,即使在iPad上也可以正常工作。我选择的文件仅来自iPad的照片库(最初是用内置相机拍摄的),当测试Chrome的桌面时,我使用完全相同的文件(很小,1.4米)进行测试。使用输入类型=“文件”与ASP.Net和iPad和IIS的Windows集成身份验证
下面是default.html中:
<!doctype html>
<html>
<head>
<title>Upload Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="upload.aspx">
<input type="file" name="foo" />
<input type="submit" value="Send" />
</form>
</body>
</html>
upload.aspx
:
<%@ Page Language="C#" CodeBehind="upload.aspx.cs" Inherits="UploadTest.Upload" %>
upload.aspx.cs
:
using System;
using System.Web.UI;
namespace UploadTest
{
public partial class Upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.Response.ContentType = "text/plain";
this.Response.Write("Got here");
this.Response.End();
}
}
}
通知我甚至不尝试访问this.Request.Files
在上面,虽然如果我这样做,例如:
var file = this.Request.Files["foo"];
this.Response.Write("Filename: " + (file == null ? "(no file)" : file.FileName));
...我确实在它的工作情况下看到文件名。
我没有Web.config
:我只是复制bin
,default.html
,并upload.aspx
成test
目录C:\inetpub\wwwroot
下,然后使用IIS管理器将其转换成使用默认设置的应用程序,以及匿名验证切换到Windows身份验证。 (但是,这是一个更复杂的项目,确实有一个Web.config的MCVE,我刚刚被剥离的东西回骨查找问题。)
总结一下:
- 在Chrome的工作就好了在桌面上
- 作品就好了iPad上,如果我不选择一个文件
- 作品在iPad上就好了,如果我切换到匿名身份验证,而不是Windows验证和做选择一个文件
- 如果我使用Win,永远在iPad上旋转dows验证并使用Chrome或Safari挑选文件用于iPad
我不是一个大的ASP.net人。我究竟做错了什么?我需要翻转一些配置开关?
据我所知,这是iOS(!)中的一个错误,它已在iOS 11.0中修复。与v10.3不兼容的完全相同的配置适用于v11。
不幸的是,iOS 11.0 will only be made available for 5th gen onward,所以我们必须通过3210读取文件并将其作为非文件数据批量发送到服务器来解决此问题。 丑陋解决方法,但它是唯一的工作。
您是否还记得苹果公司的主题(网址或帖子),指出该问题已在iOS 11.0中解决? :D –
@PhucNguyen:我只用实验证明过:我的测试iPad(更重要的是,我的客户的iPad)在v10.3上可靠地复制了问题(在Safari和Chrome中),然后我的升级没有到v11。然后,我使用v11 iPad上运行的完全相同的页面,在运行v10.3的测试iPhone上复制了该问题。 –
为了得到我的问题。我的客户将他们的设备升级到iOS v11.2.5,问题就消失了。所以,我的票已经解决了。感谢您的信息 –
我切换到使用Kerberos安全身份验证协议而不是NTLM协议和上传开始为我工作。
这对我无效(我使用IIS管理器单击身份验证并从列表中选择“Negotiate:Kerberos”,禁用内核模式身份验证,因为它与它不兼容)。你做了不同的事情吗?你所做的细节会使答案更有用。 –
你有没有找到这方面的解决方案?我遇到类似的问题,当我尝试上传文件时,集成的win auth失败。 –
@SayanPal:可悲的是:https://stackoverflow.com/a/46888408/157247(你的时间是特殊的,我只证实了一个星期前)。 –
感谢您的及时回复:)我面对Win 10的这个问题;我可能会问一个新问题。 –