Создайте VCARD, который можно скачать на Android с помощью ASP.NET -- c# поле с участием android поле с участием asp.net поле с участием vcf-vcard пол Связанный проблема

Generate vCard that can be downloaded on Android using ASP.NET


4
vote

проблема

русский

Я пробую довольно некоторое время, чтобы сгенерировать VCARD, используя ASP.NET (C #), которые можно загрузить на устройство Android.

Процесс генерации карты довольно просто, и поэтому я не слишком беспокоюсь об этом. Это сама загрузка, которую я не могу работать.

Мой код для подключения 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(); }   

Я не буду надоедать, пока не будет показан процесс генерирования, так как он не очень важен, хотя единственный параметр, который предпринимает страницу для имени пользователя, которое получено через URL URL благодаря некоторому перезаписи URL в файле Web.config. Итак, URL-пример.com/vcard/apbarratt производит vcard для пользователя, apbarratt.

Ответ о том, что запрос на получение дает этот код, выглядит так:

 <код> 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 Stock. В этих браузерах загрузка не удается, либо с именем файла «Unknown», так и термин «Ошибка» или на других устройствах с именем пользователя «apbarratt.vcf» и термин «в прогрессе», который никогда не меняется. < / P >.

Вопрос не проблема в других браузерах, таких как Opera Mobile / Mini.

Я попробовал все возможное, о чем я могу думать, читая так много блогов на подобных вопросах, которые у меня есть мечты о целом ... они действительно скучно ...

Во всяком случае, надеюсь, некоторые свежие глаза смогут мне помочь. Возможно, кто-то сделал это раньше, и мог поделиться некоторым кодом, с нетерпением жду некоторой помощи.

Энди

Английский оригинал

I have been trying for quite some time now to generate a vCard using ASP.NET (C#) that can be downloaded onto an Android device.

The process of generating the card is quite simple and so I'm not too worried about it. It's the download itself that I can't get to work.

My code for attaching the vCard to the page response looks like this:

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(); } 

I won't bother showing the generation process as it's not really important though the only parameter the page takes is for a username which is received through a RESFUL URL thanks to some URL rewriting in the web.config file. So the URL example.com/vcard/apbarratt produces the vCard for the user, apbarratt.

The response that a GET request produces for this code looks like this:

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 

This works perfectly in every single browser that I have tested it in (not iOS, that's another issue that has been solved in another way), except for Android stock browsers. In these browsers, the download fails, either with the filename "unknown" and the term "failed" or on other devices with the username "apbarratt.vcf" and the term "In progress" which doesn't ever seem to change.

The issue is not a problem in other browsers such as opera mobile/mini.

I've tried every possible thing I can think of, reading so many blogs on similar issues that I'm having dreams about the whole thing... they're really dull...

Anyway, hopefully some fresh eyes will be able to help me. Perhaps someone has done this before and could share some code, looking forward to some help.

Andy

</div
           
 
 

Список ответов

1
 
vote

У меня именно такая же проблема: все, кроме браузеров Droid Safari, казалось, работали. Мое решение было читать файл в виде текста, а затем преобразовать его в байты ASCII. Как только я изменил свой код, дроиды (2,3 и 3.2), казалось, были счастливы.

Вот кодовый фрагмент (из моего проекта на основе MVC):

 <код> Zend_Pdf4  

Надеюсь, это поможет ...

ура.

 

I had exactly the same problem: all but the stock Droid Safari Browsers seemed to work. My solution was to read the file as text, and then convert it to ASCII bytes. Once I changed my code, Droids (2.3 and 3.2) seemed to be happy.

Here is a code snippet (from my MVC-based project):

public ActionResult GetContact() {     Response.Clear();     Response.AddHeader("Content-disposition", string.Format("attachment; filename="{0}";", "MyContact.vcf"));                 //  VERY IMPORTANT!!!                 //      Read the file as text, and then convert it to ASCII bytes.                  //      If ReadAllBytes is used, extra stray characters seem to appear and DROID fails.                 //      Put the content type in the second parameter!!!       var vCardFile = System.IO.File.ReadAllText(Server.MapPath("~/Contacts/MyContact.vcf"));     return File(System.Text.Encoding.ASCII.GetBytes(vCardFile), "text/x-vcard"); } 

Hope this helps...

Cheers.

</div
 
 
0
 
vote

Не знаю, решил ли вы его, но я столкнулся с той же проблемой, и один из камнем блок был, что на поле N, кажется, будет иметь 5 значений, поэтому вы должны вставить дополнительные полуобывающие до конца (в вашем примере 4 из них) или, таким образом:

 <код> Zend_Pdf5  

Другое дело, что лучше установить тип контента для текста / vcard, это стандарт сейчас.

 

Don't know if you've solved it, but I encountered the same problem and one of the stumbling blocks was, that the N field seems to be expected to have 5 values, so you should insert an extra semi-colons to the end (in your example 4 of them), or thus:

N;LANGUAGE=en-us:Barratt;Andy;;; 

Another thing is, that it's better to set content type to text/vcard, that's the standard now.

</div
 
 

Связанный проблема

2  Обращайтесь с событиями для динамического (время выполнения) - vb.net  ( Handle events for dynamic run time controls vb net ) 
У меня есть элемент управления WebBrowser, который создается и добавляется в форму во время выполнения. Как подключить этот элемент управления подпрограммой...

1  Xero C # «Текущий токенопозиторий не имеет токена текущего запроса»  ( Xero c sharp the current tokenrepository doesnt have a current request token ) 
удалось подключиться к Xero API и получить токен запроса. Однако после перезапуска проекта (для отладки) он в основном дает следующую ошибку при проложении то...

1  Как я могу прочитать все предметы питания?  ( How do i read all feed items ) 
Я хочу прочитать все элементы подачи в C #. Решения, которые я обнаружил, только для новейших элементов, таких как только последние 10 дней. У кого-нибудь е...

-4  Будет вернуться внутрь памяти утечки для петли?  ( Will a return inside of a for loop leak memory ) 
в основном все, что мне нужно знать, является ли возвращение внутри цикла для цикла в C #. <код> for (int i = 0; i <= 20; i++ ) { if(i == 10) re...

1  ASP.NET Печать PDF непосредственно к принтеру с настройками  ( Asp net print pdf directly to printer with preferences ) 
Я работаю над проектом, который требует от нас отправлять PDFS на печатную прессу. Ранее мы сделали это с помощью настольного приложения и Acrobat, но я хотел...

0  C # сделать в то время как Unassigned локальной проблемы переменной  ( C sharp do while unassigned local variable problem ) 
<Р> Я после C # курса и пытаюсь обновить мой метод ввода пользователя, чтобы проверить, если введенная входную консоль целое. Я написал сам в то время как сдел...

5  Можем ли мы использовать ответ .Flush () вместо ответа. Денды ()  ( Can we use response flush instead of response end ) 
<Код> Response.End() генерирует <код> ThreadAbortException . Использование <код> HttpContext.Current.ApplicationInstance.CompleteRequest вместо этого не р...

8  Требуется 407 аутентификация - не отправлено проблем  ( 407 authentication required no challenge sent ) 
<Сильное> Обновление: Если вы только что прибыли на этот вопрос, генеральный сигнал заключается в том, что я пытаюсь сделать httpwebrequest через прокси, и ...

3  Как мне расположить эллипс на сетке Silverlight?  ( How do i position an ellipse on a silverlight grid ) 
Я создаю приложение Silverlight, которое позволит вам нажать в два места на экране и нарисовать эллипс, основной ось которого начинается и заканчивается в мес...

0  Присоединиться к запросу с LINQ  ( Join query with linq ) 
Я пытаюсь здесь сделать несколько левых присоединиться к запросу LINQ, но я бы сказал, что понятия не имею, как материализовать эту идею. в основном вот 3 с...

0  Должен ли я использовать ExecuteNonQuery для этой команды резервного копирования БД  ( Should i use executenonquery for this db backup command ) 
<Р> У меня есть метод, который позволяет мне пнуть резервную копию базы данных. То, что я интересно, если я должен использовать ExecuteNonQuery () в этом конте...

4  Как написать на пользовательский журнал событий?  ( How to write to a custom event log ) 
Я пытаюсь получить мою службу .NET Windows вправо на пользовательский журнал событий. Я использую <код> EventLogInstaller , чтобы создать журнал событий и ист...

1  WIX Набор инструментов Build не удается после обновления от .NET 4.0 до 4.6.1: не может загрузить MSBuild Wrapper?  ( Wix toolset build fails after upgrading from net 4 0 to 4 6 1 cannot load msbu ) 
Так после обновления всего проекта до 4.6.1 Я получаю эту ошибку, выброшенную нагревом, когда я его создаю: <код> Failed to load MSBuild wrapper object: Cou...

0  Streaminsight и долгосрочные запросы  ( Streaminsight and long running queries ) 
У меня есть приложение, построенное на вершине Streaminsight 1.2, который имеет несколько постоянных запросов, выполняющих некоторые расчеты в операторах опре...

0  Как нарисовать в автономном режиме круг 1500 метров в диапазоне Geocoordinate в Windows Phone 8  ( How to draw offline circle of 1500 meters range over the geocoordinate in window ) 
Я хочу нарисовать автономный круг над геокоординаном в Windows Phone Этот круг составляет 1500 метров, и он ищет цель в этом диапазоне это мой образ, где у...

Связанный проблема

2  Обращайтесь с событиями для динамического (время выполнения) - vb.net 
1  Xero C # «Текущий токенопозиторий не имеет токена текущего запроса» 
1  Как я могу прочитать все предметы питания? 
-4  Будет вернуться внутрь памяти утечки для петли? 
1  ASP.NET Печать PDF непосредственно к принтеру с настройками 
0  C # сделать в то время как Unassigned локальной проблемы переменной 
5  Можем ли мы использовать ответ .Flush () вместо ответа. Денды () 
8  Требуется 407 аутентификация - не отправлено проблем 
3  Как мне расположить эллипс на сетке Silverlight? 
0  Присоединиться к запросу с LINQ 
0  Должен ли я использовать ExecuteNonQuery для этой команды резервного копирования БД 
4  Как написать на пользовательский журнал событий? 
1  WIX Набор инструментов Build не удается после обновления от .NET 4.0 до 4.6.1: не может загрузить MSBuild Wrapper? 
0  Streaminsight и долгосрочные запросы 
0  Как нарисовать в автономном режиме круг 1500 метров в диапазоне Geocoordinate в Windows Phone 8