很长一段时间以来,我一直在尝试使用 ASP.NET (C#) 生成可以下载到 Android 设备上的 vCard。
生成卡片的过程非常简单,所以我不太担心。这是我无法开始工作的下载本身。
我将 vCard 附加到页面响应的代码如下所示:
public void downloadCard()
{
//generate the vCard text
string vCard = generateCard();
//create the filename the user will download the file as
string filename = HttpUtility.UrlEncode(username + ".vcf", System.Text.Encoding.UTF8);
//get a reference to the response
HttpResponse response = HttpContext.Current.Response;
//clear the response and write our own one.
response.Clear();
response.ContentType = "text/x-vcard";
response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ";");
response.Write(vCard);
response.End();
}
我不会费心展示生成过程,因为它并不是很重要,尽管页面采用的唯一参数是用于通过 RESFUL URL 接收的用户名,这要归功于 web.config 文件中的一些 URL 重写。因此 URL example.com/vcard/apbarratt 为用户 apbarratt 生成 vCard。
GET 请求为此代码生成的响应如下所示:
200 OK
Date: Wed, 15 Aug 2012 13:49:56 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Disposition: attachment; filename=apbarratt.vcf;
Content-Length: 199
Server: Microsoft-IIS/7.5
Content-Type: text/x-vcard; charset=utf-8
Cache-Control: private
BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=en-us:Andy Barratt
FN:Andy Barratt
TEL;CELL;VOICE:07000000000
URL;WORK:http://example.com
EMAIL;INTERNET:apbarratt@example.com
END:VCARD
这在我测试过的每一个浏览器中都能完美运行(不是 iOS,这是另一个以另一种方式解决的问题),除了 Android 股票浏览器。在这些浏览器中,下载失败,文件名“未知”和“失败”一词,或者在其他设备上,用户名“apbarratt.vcf”和“进行中”一词似乎永远不会改变。
该问题在其他浏览器(例如opera mobile/mini)中不是问题。
我已经尝试了我能想到的所有可能的事情,阅读了很多关于类似问题的博客,以至于我梦想着整件事……它们真的很无聊……
无论如何,希望一些新鲜的眼睛能够帮助我。也许有人以前做过这个并且可以分享一些代码,期待一些帮助。
安迪