Asp.NET'de Chrome Tarayıcıyı Bulmak

Request.Browser.Browser

Asp.NET'de yukarıdaki satır normalde bize tarayıcının adını verir. Ancak browser olarak Google Chrome kullanılıyorsa bu bilgi AppleMAC-Safari şeklinde yanlış olarak geliyor. Bunu düzeltmek için Request.UserAgent değerinin içerisinde Chrome kelimesi geçiyormu diye bakabilir yada daha güzel bir çözüm olan browser dosyasını kullanabiliriz.

Aşağıda içeriğini verdiğim xml dökümanını projenizin root klasörüne, Asp.NET'in özel klasörlerinden olan App_Browsers klasörünü ekleyip onun içerisine Chrome.browser olarak kaydederseniz, Chrome için browser adı ve versiyonunu düzgün alırsınız.

<browsers>
  <browser id="Chrome" parentID="Safari1Plus">

    <identification>
      <userAgent match="Chrome/(?'version'(?'major'\d+)\.(?'minor'\d+\.\d+).\d+)" />
    </identification>

    <capabilities>
      <capability name="browser" value="Chrome" />

      <capability name="majorversion" value="${major}" />
      <capability name="minorversion" value="${minor}" />

      <capability name="version" value="${version}" />
    </capabilities>

  </browser>
</browsers>

IPInfoDB API Kullanarak Kullanıcının Şehir, Ülke Bilgilerini Almak

IPInfoDB API sini kullanarak sitemize gelen kullanıcının hangi ülkeden, hangi bölgeden ve hangi şehirden olduğunu bulmak oldukça kolay. API şehir olarak 100% nokta atışı yapamıyor, ancak ülkede pek sorun olacağını düşünmüyorum.

IPInfoDB API kullanabilmek için öncelikle bir API key almamız gerekiyor, bunun için http://www.ipinfodb.com/register.php adresine gidip formu doldurup kayıt olmamız gerekli, daha sonra API keyimize sahip oluyoruz.

Ben API yi kullanabilmek için basit bir class yazdım, parametre olarak api key ve ip adresi alıyor, classı çağırıp bu bilgileri verdiğimizde kullanıcının bilgilerine ulaşıyoruz. Yazmış olduğum classı aşağıda veriyorum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace arunes
{
    public class Location
    {
        public string Country { get; set; }
        public string RegionName { get; set; }
        public string City { get; set; }
        public double Latitude { get; set; }
        public double Longitude { get; set; }

        /// 
        /// Verilen ip adresini ipinfodb de sorgular
        /// 
        /// ipinfodb api key
        /// sorgulanacak ip adresi
        public Location(string ipInfoDbApiKey, string ipAddress)
        {
            SetLocationData(ipInfoDbApiKey, ipAddress);
        }

        private void SetLocationData(string ipInfoDbApiKey, string ipAddress)
        {
            try
            {
                var url = "http://api.ipinfodb.com/v2/ip_query.php?key={0}&ip={1}&timezone=false";
                XDocument locationXml = XDocument.Load(string.Format(url, ipInfoDbApiKey, ipAddress));
                Country = locationXml.Root.Element("CountryName").Value;
                RegionName = locationXml.Root.Element("RegionName").Value;
                City = locationXml.Root.Element("City").Value;
                Latitude = Convert.ToDouble(locationXml.Root.Element("Latitude").Value);
                Longitude = Convert.ToDouble(locationXml.Root.Element("Longitude").Value);
            }
            catch
            { }
        }
    }
}

Class ın kullanımıda şu şekilde;

arunes.Location loc = new Location("IPInfoDB den aldığımız apikey", "ip adresi");
var country = loc.Country; // kullanıcının ülke bilgisi
var regionName = loc.RegionName; // bölge bilgisi
var city = loc.City; // şehir bilgisi
var latitude = loc.Latitude; // enlem
var longitude = loc.Longitude; // boylam

Ancak dediğim gibi şehir konusunda 100% doğru cevap alamıyoruz. O yüzden enlem ve boylamında tam doğru yanıt vermeyeceği belli, ancak yinede bazı konularda işinizi görebilir.

wkhtmltopdf Kullanarak ASP.NET C# ile HTML Dökümanını PDF'e Çevirmek

Daha önce ücretli bir html to pdf converter komponenti kullandım, ancak hızı ve kullanım kolaylığı açısından çok memnun kalmamıştım. Geçenlerde yine bir proje için html dökümanlarını pdf'e çevirmemiz gerekiyordu, aynı komponenti kullanmamak için başka bir çözüm yolu aradım ve wkhtmltopdf 'e denk geldim. Bu program html den resime de çeviriyor ama onu henüz denemedim.

Programı kurduktan sonra 64 bit işletim sistemleri için yükleme klasörü C:\Program Files (x86)\wkhtmltopdf oluyor, 32 bit ler için klasör adında (x86) olmayacak. Çevirilerimizi kurulum yapılan klasörde wkhtmltopdf.exe ile yapacağız. Programı komut satırı ile çalıştırabiliyoruz. Örnek olarak bu html sayfasını kullandım.

C:\Program Files (x86)\wkhtmltopdf>wkhtmltopdf http://test.arunes.com/wkhtmltopdf/pdf.htm test.pdf

Programın oluşturduğu pdf dosyasını buradan görüntüleyebilirsiniz.

Şimdi gelelim bu işlemi ASP.NET ile nasıl yapacağımıza, bunun için sadece aşağıdaki kodu pdfi oluşturmak istediğimiz yerde kullanmamız yeterli olacaktır.

var savePath = Server.MapPath("~/test.pdf"); // pdf'in kaydedileceği konum

System.Diagnostics.ProcessStartInfo processInfo = 
    new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe");
processInfo.UseShellExecute = false; // program çalıştığında görünmemesi için 
processInfo.CreateNoWindow = true; // program çalıştığında görünmemesi için
processInfo.Arguments = string.Format(@"-O Landscape http://test.arunes.com/wkhtmltopdf/pdf.htm {0}", savePath) ; // -O Landscape parametresi dökümanın yatay olmasını sağlar
processInfo.RedirectStandardOutput = true;
var process = System.Diagnostics.Process.Start(processInfo);
process.WaitForExit(); // bir sonraki satıra gitmek için işlemin bitmesini bekleyelim

İşte pdf oluşturmak bu kadar basit. Pdf için kullanılacak html i önce başka bir kodla kendiniz oluşturup url olarak da gönderebilirsiniz.

Programın şu an için son versiyonunu buradan indirebilirsiniz. Güncel versiyonunu kontrol etmek için download sayfasına girip son versiyon için windows installer olanı indirebilirsiniz. Bu adresten'de tüm paremetreleri görebilirsiniz.

Asp.NET Websitesi Üzerinden Console Application Çalıştırmak ve Sonuç Okumak

Kendi serverımızda çalışması için yazdığım CMS uygulamasında CMS üzerinde eklenen her websitesi için IIS'e binding eklememiz gerekiyordu. Bu işlemi manuel yapmak zaman kaybı. Bende bu işi yapan bir konsol uygulaması yazdım ve websitesinden bu konsol uygulamasını çalıştıran ve programdan dönüş değerini okuyan bir method yazdım. Burda kodun tamamını vermeyeceğim ancak basitçe bu işlemi nasıl yapabileceğinizi anlatacağım.

Öncelikle yazının başında kendi serverımız diye başlamamın sebebi, bu tarz bir uygulamada büyük ihtimalle admin haklarına ihtiyacınız olacak. Eğer admin kullanıcı adı ve şifresine sahipseniz konsol uygulamasını nasıl impersonate edeceğinizi bir sonraki yazımda anlatacağım, şimdilik basit bir websitesi üzerinden basit bir konsol uygulaması çalıştıralım. Yazının sonunda uygulamanın örnek kodlarını indirebilirsiniz.Fazlası...

CRM 4.0'da InvalidOperationException : Request format is invalid : application/json charset=utf-8 Hatası

Crm içerisinden, custom aspx' leriniz de yazdığınız bir web servise erişmeye çalıştığınızda InvalidOperationException : Request format is invalid : application/json charset=utf-8 hatası alıyorsanız, web servisin bulunduğu projenin web.config dosyasına aşağıdaki bölümü eklemeniz gerekiyor.

<webServices>
	<protocols>
		<add name="HttpGet"/>
		<add name="HttpPost"/>
	</protocols>
</webServices>

I'm blogging in English too. To visit my English blog click here.

Ali Rıza Üneş Hakkında

Amatör olarak 1998, profesyonel olarak 2001 yılından bugüne kadar web sitesi tasarımı ve programlama üzerine çalışmıştır. 2008 yılında Microsoft .NET teknolojileri üzerine eğitim almış, ASP.NET, C# ile yazılımlar/web siteleri ve Microsoft Dynamics CRM üzerine özel uygulamalar geliştirmektedir.

Profilin tamamını görüntüle

Sayfalar

Stackoverflow

Arşiv

Son Yorumlar

Comment RSS

• Microsoft Dynamics™ CRM 4.0 Installation and Deployment
• Microsoft Dynamics™ CRM 4.0 Customization and Configuration
• Microsoft Dynamics™ CRM 4.0 Applications