Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

Devexpress MVC Could not load file or assembly 'Microsoft.Owin.Security.Cookies'

clock Mayıs 16, 2018 14:30 by author OzgurOzvaris

Merhaba,

Uzun bir aradır admin sayfama bir hatadan dolayı bağlanamıyordum sonunda erişebildim. Comment tadında bloglarımıza devam ediyoruz.

Kaynak : 

The "Could not load file or assembly 'Microsoft.Owin' or one of its dependencies" error occurs with a sample project that is created with DevExpress wizard

Devexpress MVC ile yeni bir uygulama visual Studio 2017 de gelişitrmeye çalıştığımda şu hatayı aldı 

 Çözümü

<dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="4.0.30319" />
</dependentAssembly>

İyi çalışmalar.

 



Handling HttpWebRequest.GetResponse WebException Error

clock Kasım 24, 2017 16:09 by author OzgurOzvaris

Merhaba ,

Kaynak :

https://stackoverflow.com/questions/7261986/how-to-get-error-information-when-httpwebrequest-getresponse-fails 

HttpWebRequest nesnesi bazı http status kodlarına göre hata dönebilir böyle bir durumda c# kodunuz catch'e düşecektir. Bu aşamada catch bloğunda bu responseların body kısmından hata ile ilgili içeriği alabilirsiniz.

try
{

            WebRequest webRequest = WebRequest.Create(txtUrl.Text);
            HttpWebRequest httpRequest = (HttpWebRequest)webRequest;

            httpRequest.Method = "POST";
            httpRequest.ContentType = "application/json; charset=utf-8";

            string sAuthorization = "Authorization: Basic " + txtApiKey.Text;
            httpRequest.Headers.Add(sAuthorization);

            httpRequest.ProtocolVersion = HttpVersion.Version11;
            httpRequest.Accept = "text/xml";
            httpRequest.Credentials = CredentialCache.DefaultCredentials;
            if (txtHeader.Text != "")
            {
                httpRequest.Headers.Add(txtHeader.Text);
            }

            Stream requestStream = httpRequest.GetRequestStream();
            //Create Stream and Complete Request             
            StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII);
            streamWriter.Write(txtRequestData.Text);
            streamWriter.Close();
            
            HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
            StreamReader srd = new StreamReader(wr.GetResponseStream());
            txtResponseData.Text = srd.ReadToEnd();



}
catch (WebException ex)
{
    using (var stream = ex.Response.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        txtResponseData.Text = reader.ReadToEnd();
    }
}
catch (Exception ex)
{
    // Something more serious happened
    // like for example you don't have network access
    // we cannot talk about a server exception here as
    // the server probably was never reached
}

 

İyi çalışmalar

 

 



c# TLS 1.2 connection .Net 4.0

clock Kasım 23, 2017 11:42 by author OzgurOzvaris

Merhaba Arkadaşlar

Kaynak :

TCP/IP Protocol Architecture

SslProtocols Enumeration

https://stackoverflow.com/questions/4137106/are-there-net-implementation-of-tls-1-2 

https://stackoverflow.com/questions/37869135/is-that-possible-to-send-httpwebrequest-using-tls1-2-on-net-4-0-framework

Bu gün ödeme entegrasyonu yaptığımız sistemlerden bir tanesi artık TLS 1.1 değil TLS 1.2 kullandıklarını söyledi. Bizde kodumuzu ona uydurmak durumunda kaldık.

Öncelikle TLS kavaramının OSI katmanlarında Transpor Layer Security kavramına karışık geldiğini belirtmekte fayda görüyorum. 

.Net 4.5 versiyonunda sorunsuz olarak TLS 1.2 yi destekliyor

//System.Net.ServicePointManager.SecurityProtocol
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // comparable to modern browsers
var response = WebRequest.Create("https://www.howsmyssl.com/").GetResponse();
var body = new StreamReader(response.GetResponseStream()).ReadToEnd();

Fakat şuan bizim çalıştığımı proje ne yazıkki .Net 4.0

4.0 için de örnek kodumuz

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;

İyi çalışmalar.

 

 



c# mvc ajax post - 1

clock Eylül 28, 2017 11:07 by author OzgurOzvaris

Merhaba Arkadaşlar,

c# mvc mimarinin en önemli esnekliklerinden biriside sayfayı parçalı olarak yükleyebilmenizdir. Ancak mevcut mvc yapısı çok yalın yalın bir frame work ile geldiği için partial viewların sayfanıza yerleşebilmesi yada kaydet, sil, ara gibi işlemlerin ajax ile iletilip dönen mesajların gösterilmesi gibi işlemler için kendinize ait bir javascript framework oluşturmanız gerekiyor.

Bu gün size kendi oluşturduğum frameworkten controller metodlarını çağırırken kullandığım ajaz yöntemlerden bahsedeceğim. Ne yazıkkı çalışmamız tam bir eğitim olmadığı ve temelden tepeye doğru yükselmediği için biraz tepeden dalma olacak. Ama anlamaya çalışırsanız sizede faydalı olacağını düşünüyorum.

1. Controller metodu ajax ile çağırma senaryosu ayrı ayrı value parametrelerle ile çağırmak

//View javascript:  

var data = { param1: val1, param2: val2, param3: val3}

ajaxMethod(url, data);

//c# controller:
public ActionResult Controllermethod(int param1, int param2, int param3)

2. Controller metodu ajax ile çağırma senaryosu metodu class array parametresi ile çağırmak 

//View javascript: 

var classParameter= new Array();

classParameter.push({ param1: val1, param2: val2, paramn: valn });
...
classParameter.push({ param1: val1, param2: val2, paramn: valn });

ajaxMethod(url, $.postify(classParameter, "classParameter")) 

//c# controller: 

public IEnumerable<ClassType> classParameter

public ActionResult ControllerMetod(IEnumerable<ClassType> classParameter)

 3. Controller metodu ajax ile çağırma senaryosu - metodu serilized form input html elemets class parametresi ile çağırmak 

Burada kullanılan postify metodu serialize edilmiş dizinin sonuna yeni bir class eklemenizi sağlıyor.

Kaynak : Posting Array and Form Data to Controller - MVC Ajax

//View Javascript

var frm = $("#Form1 :input");

var ExtraData = {

    param1: val1,

    param2: val2,

    param2: val3,

}

var data= frm.serializeObject($.postify(ExtraData, "ExtraData"));

ajaxMethod(url, data);

//c# controller

public class FormData
    {
        public int? inputElement1{ get; set; }
        public string inputElement2{ get; set; }
        public string inputElement3{ get; set; }
        ...
        public DateTime? inputElement4 { get; set; }
        public bool? inputElement5 { get; set; }
        public int? inputElement6 { get; set; }


        public ExtraData ExtraData { get; set; }
    }


    public class ExtraData
    {
        public bool param1 { get; set; }
        public string param2 { get; set; }
        ...
        public ICollection<ClassType> param3{ get; set; }
    }

public ActionResult ControllerMetod(FormData classParameter)

4. Controller metodu ajax ile çağırma senaryosu - ajax dataya direk ilaveler yapmak

Daha sonradan serilized edilmiş form datasının bir dizi olduğunu düşünerek postify kullanmadan direk olarak diziye eleman ekleyerek yeni propertiler oluşturdum.

Not : Bu şekilde tekil int,string vs gibi değerleri ekleyebilirsiniz.

//View Javascript

var frm = $("#Form1 :input");

var $data = frm.serializeObject();

$data ['Param1'] = val1;
$data ['Param2'] = val3;


ajaxMethod(url, $data);

//c# controller

public class FormData
    {
        public int? inputElement1{ get; set; }
        public string inputElement2{ get; set; }
        public string inputElement3{ get; set; }
        ...
        public DateTime? inputElement4 { get; set; }
        public bool? inputElement5 { get; set; }
        public int? inputElement6 { get; set; }


        public string Param1{ get; set; }
        public int Param2{ get; set; }

    }

public ActionResult ControllerMetod(FormData classParameter)

İyi çalışmalar.

 

 



c# ajax json post

clock Ocak 7, 2017 18:00 by author OzgurOzvaris

Merhaba,

Kaynak : How do I build a JSON object to send to an AJAX WebService

Eğer bir c# mvc metodunu json data göndermek isterseniz aşağıda paylaştığım örmek faydalı olacaktır.

public Response ValidateAddress(Request request1, Request myRequest2)
data: {request1:$.toJSON(myData1), myRequest2:$.toJSON(myData2)}

Yada

data: {request1:JSON.stringify(myData1), myRequest2:JSON.stringify(myData2)}

İyi çalışmalar.

 



Basit SignalR uygulaması - 2 Server to Client

clock Mart 4, 2016 17:40 by author OzgurOzvaris

Merhaba Arkadaşlar,

Geçen gün ki çalışmamızda n client'ın birbiri ile signalr ile haberleşmesini dair basit bir mvc3 uygulaması gördük

Basit SignalR uygulaması - 1 Client to Client .

Bu gün ise dışarıya açık bir webapi yazacağız ve 3. party bir uygulama be web api aracılığı ile clientlarımıza mesaj gönderecek. Biz kendi uygulamamızda santral uygulamasının web api aracılığı ile client'larımıza çalan telefona göre pencere açması için bu yöntemi kullandık. Sizlerde istediğiniz benzer amaçlar için kullanabilirsiniz.

Kaynaklar,

How to create Web API using MVC 3.0

Routing with Multiple Parameters using ASP.NET MVC

Örnek projemizin kaynak kodu SignalRSample.zip (9,18 mb) (vs 2010 mvc 3)

Öncelikle bir nuget paketi yüklemelisiniz

Install-Package Microsoft.AspNet.WebApi -Version 4.0.30506

Ardından global.asax a bir route satırı eklemek geliyor. !Beni biraz uğraştırdı. Bu route satırının diğer route satırlarının üstüne eklemenizi tavsiye ederim. Aksi taktirde çalışmayabilir. ! 

using System.Web.Http;
routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new {id = RouteParameter.Optional}
                );

Artık yazacağımız web api'ye http://sitename/api/ApiName?paramaters şeklinde erişebiliriz. 

Şimdi geçen uygulamamızda geliştirdirdiğimiz uygulamamızdaki client lara mesaj gönderen bir örnek api uygulaması yazalım.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;

namespace SignalRSample.Controllers
{
    /// <summary>
    /// http://stackoverflow.com/questions/11472920/send-signalr-message-from-server-to-all-clients
    /// http://stackoverflow.com/questions/21519911/how-to-create-web-api-using-mvc-3-0
    /// http://stackoverflow.com/questions/2246481/routing-with-multiple-parameters-using-asp-net-mvc
    /// 3. nolu global.asax route basamağını diğer routların üstüne yazmayınca çalışmadı
    /// </summary>
    public class ValuesController : ApiController
    {

        public string Get(string id, string Message)
        {
            SignalRHost.OpenPopUp(id, Message);
            return "1";
        }

    }
}

Şimdi uygulamamızı çalıştıralım.ve client id olarak 1 Set edelim

test apimizi adres bardan çağıralım.

http://localhost:50995/api/Values?id=1&message=Merhaba%20D%C3%BCnya

Eğer sorunsuz bir şekilde basamakları uyguladı iseniz. Ekranda merhaba dünya mesajını görmüş olmanız gerekiyor.

 

Örnek projemizin kaynak kodu SignalRSample.zip (9,18 mb) (vs 2010 mvc 3)

İyi çalışmalar.

 

 



Basit SignalR uygulaması - 1 Client to Client

clock Mart 4, 2016 11:37 by author OzgurOzvaris

Merhaba,

Web yazılımlarında bazen client'lar ın birbiri ile etkileşim içinde olması yada serverdan bazı clientlara yada tamamına mesajlar göndermeniz gerekebilir. Bir çok benzer senearyado signalR güzel bir mesajlaşma imkanı sağlıyor.

Burada örneklerde paylaşacağım signalR uygulaması signalR 1.0 örnekleridir. yinede 2.0 için size yol gösterecektir.

Kaynaklar 

ASP.NET SignalR

Örnek projemizin kaynak kodu SignalRSample.zip (9,18 mb) (vs 2010 mvc 3)

Öncelikle SignalR yi sisteme kurmanız gerekiyor bunun için iki yol var.

1. Yol : Nuget Console üzerinden Install-Package Microsoft.AspNet.SignalR

2. Yol : Manuel kurulum

SignalR sayfasından indiriyoruz.

Dll lerini referans'a ekliyoruz.

 

global.asax Application_Start'a 

RouteTable.Routes.MapHubs() satırını ekliyoruz (bu satır eklenmezse biraz sonra javascript bölümüne ekleyeceğimiz otomatik oluşan signalr/hubs scripti oluşturulmuyor)

Web.config

<validation validateIntegratedModeConfiguration="false" />

<modules runAllManagedModulesForAllRequests="true"/>

satırları olmalı. (Zaten default olarak bu şekilde...)

Javascript

SignalR çalıştırmak istediğiniz sayfaya

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.9.2.blue/js/jquery-1.8.3.js")" ></script>

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.signalR-1.0.0-rc2.min.js")"></script>

<!--Reference the autogenerated SignalR hub script. -->

<script type="text/javascript" src="/signalr/hubs"></script>

javascript dosyalarını referans göstermeniz gerekiyor. jquery daha yüksek olabilir ancak 1.5 gibi versiyonlarda hata alıyorsunuz. Buna dikkat edin.

Şimdi yapmamız gereken basit mvc tabanlı bir SinalR uygulaması. Boş mv3 projesi oluşturalım.

Önce mesaj alıp vermede kullanmak için bir SignalRHost Class'ı oluşturuyoruz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR.Hubs;
using Microsoft.AspNet.SignalR.Transports;
using Microsoft.AspNet.SignalR.Infrastructure;
using Microsoft.AspNet.SignalR;
using System.Threading.Tasks;
using System.Timers;

namespace CCMWeb1_0
{
    [HubName("CCMainSRHub")]
    public class SignalRHost : Hub
    {

        /// <summary>
        /// http://stackoverflow.com/questions/14439389/sending-json-with-signalr
        /// </summary>
        /// <param name="name"></param>
        /// <param name="message"></param>
        public void Send(string ClientID, string MessageType, string Message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(ClientID, MessageType, Message);

        }

        public static void OpenPopUp(string ClientID)
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<SignalRHost>();
            context.Clients.All.broadcastMessage(ClientID, "OpenPopUp", "OK");
        }
    }
}

 Views->Home->Index.chtml içine bir kaç java script fonksyonu ekliyoruz.

@{
    ViewBag.Title = "Home Page";
}
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.9.2.blue/js/jquery-1.8.3.js")" ></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.signalR-1.0.0-rc2.min.js")"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script type="text/javascript" src="/signalr/hubs"></script>
<script type="text/javascript">
    var $lib = {};
</script>
<script type="text/javascript">
    $(document).ready(function() {

    });

    //Client'ın kendine özel id'sini set ediyor
    function SetID() {



        $("#hdnConnectionID").val($("#txtConnectionID").val());

        $("#lblConnection_ID").text($("#txtConnectionID").val());

        $lib.ClientID = $("#txtConnectionID").val();

        //alert($("#hdnConnectionID").val());

    }

    $(function () {
        // Declare a proxy to reference the hub. 
        //var CCMainSR = $.connection.CCMainSRHub;


        // Create a function that the hub can call to broadcast messages.
        //Serverdan gelen mesajları alıp yönetiyor
        $.connection.CCMainSRHub.client.broadcastMessage =
        function (pClientID, MessageType, Message) {



            if (pClientID == $lib.ClientID || pClientID == "All" || pClientID == "all") {
                //alert(pClientID);
                //alert(Message);
                $('#txtReceivedMessage').val($('#txtReceivedMessage').val() + Message + "\n");

            }

        };


        //Bu satır önemli...
        $.connection.hub.start().done(function () { });
    });

    //Server'a clientlara gönderilmek üzere mesaj gönderiyor
    function SendSignalR(ClientID, MessageType, Message) {
        if (ClientID == "") {
            alert("Have to Enter Receiver ID");
            return;

        }

        
        
        $.connection.CCMainSRHub.server.send(ClientID, MessageType, Message);
    }

</script>

<h2>@ViewBag.Message</h2>
<p>
    <input type="hidden" id="hdnConnectionID"/>
    <table>
        <tr>
            <td>
                <span >Connection ID</span>
            </td>
            <td>
                <span id="lblConnection_ID">0</span>
            </td>
        </tr>
        <tr>
            <td>
                <span >Set Connection ID</span>
            </td>
            <td>
                <input type="text" id="txtConnectionID"/>
            </td> 
            <td> <input type="button" onclick="SetID();" value="SetID"/></td>
        </tr> 
        <tr>
            <td>
                <span >Receivers ID (multiple user sperate with comma , )</span>
            </td>
            <td>
                <input type="text" id="txtReceiver"/>  <span >Set value "All" to send all user</span>
            </td> 
            <td> </td>
        </tr>
        <tr>
            <td>
                <span >Message</span>
            </td>
            <td>
                <input type="text" id="txtMessage"/>
            </td> 
            <td> <input type="button" onclick="SendSignalR($('#txtReceiver').val(),'Test',$('#txtMessage').val());" value="Send Message"/></td>
        </tr>
        
        <tr>
            <td>
                <span >Recived Messages</span>
            </td>
            <td colspan="3">
                <textarea id="txtReceivedMessage" cols="40" rows="5" style="width:500px; height:250px;" ></textarea>    
                
            </td> 
            
        </tr>
    </table>
    
    
</p>

Afiyetle artık basit bir chat signalR uygulamanız oldu.

Set Client ID diyerek istediğiniz kadar client ekranı browserda açabilirsiniz. Mesaj göndermek istediğini client'ın id sini yazarak yada All diyerek bütün client lara mesaj gönderebilirsiniz.

Örnek projemizin kaynak kodu SignalRSample.zip (9,18 mb) (vs 2010 mvc 3)

İsterseniz bu yapıya bir de web api ekleyerek bir sonraki projede bağımsız bir merkezden clientlarımıza mesaj gönderelim ne dersiniz?

Görüşmek üzere.

 

 

 



LinqKit Linq dynamic sql parameter

clock Şubat 11, 2016 13:47 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynaklar

What is LINQKit?

Dynamically Composing Expression Predicates

How does PredicateBuilder work

linqpad - adding reference to assembly to using custom types

How does LINQPad reference other classes

Building LINQ Queries at Runtime in C#

LinqPad adds an S to the end of every table

Writing Methods and Classes in LINQPad

Entity Framework te Linq ile yapacağınız geliştirmelerde. ilk karşınıza çıkacak zorluklardan bir tanesi dinamik olarak parametre eklemek.

LinqPad malumunuz uzun süredir linq cümleleri geliştirmek için kullanılan bir araç. Gerek database bağlantılı gerekse database bağlantısı olmadan linq sorgularının çıktılarını inceleyebiliryorsunuz. Bu bloğu sanki LinqPad ile ilgili bası basamakları biliyormuşsunuz gibi bazı ön kabullerle başlayacağım. Bu Ön kabuller.

1 - Temel Linq bilgisi

2 - LinqPad download ve install edilmesi

3 - Database connection oluşturulması

Bu ön kabuller üzerinden devam ederek sizlere dinamik bir linq sorgusu nasıl geliştirilir izah etmeye çalışacağım.

LinqPad adresinden gerekli setup işlemlerini yapıyor ve LinqPad'i açıyorsunuz

 

- Öncelikli olarak Sol menüdeki Add Connection bölümünü tıklayarak connection oluşturmanız gerekmektedir.Default linki kullanarak devam et diyerek connection kurabilirsiniz. (Güncelleme 25.04.2016 )Connection oluştururken "Pluralize" seçeneğinin açık olup olmadığını dikkat edin. Ben kapalı olarak kullandığım için bir müddet neden Expandable komutum çalışmadı diye zaman harcadım. Meğerse tablo adının sonuna "s" eklemiş

 

- Şimdi sıra geldi dinamik parametreler eklememize yardımcı olan LinqKit dll'ini yüklemeye. Bu dll'i nuget yada What is LINQKit? makalesinin altındaki download linki ile yükleyebilirsiniz. 

-  LinqKit kurduğunuz yerden LinqPad'a refernce olarak eklemeniz gerekmektedir. Bunun için F4 Tuşuna basmalısınız. Karşınıza Add Reference penceresi çıkacak. Browse seçilerek LinqKit işaret edildikten sonra, Additional Namespace inmport bölümünden LinqKit adı yazılarak LinqPad'in artık LinqKit'i tanıması sağlanır.

 

- Daha sonra Language seçmelerinden c# statements seçmelisiniz.

 

Ben kendi örneğimde FSYS_USERS tabloma OnlyActive User parametresini test ettim. Siz kendi tablolarınızı çağırarak test yapabilirsiniz. Bu arada Context adı yazmadan direk olarak tablo adı yazdığıma dikkat edin.

var OnlyActiveUsers = true;
Expression<Func<FSYS_USERS, bool>> FSYS_USERSPredicate = p1 => true;

            if (OnlyActiveUsers)
            {
                FSYS_USERSPredicate = FSYS_USERSPredicate.And(z => z.FSTATUS == 'A');
            }
			
var x = from c in FSYS_USERS.Where(c => true).Where(FSYS_USERSPredicate).OrderBy(o=> o.ADSOYAD)
                    select c;

 //           x.ToList();
 
 x.Dump();

 

Yukarıdaki örnekte Eğer OnlyActiveUsers set edilirse linq cumlesine bir predicate daha ekleniyor. Run tuşuna basarak aşağıdaki tablardan dönüş değerlerini, sonuçta oluşan dinamik linq cümlesini ve sql'e giden cümleyi görebilirsiniz. Dump Komutu LinqPad'in aşağıda listeyi görebilmenizi sağlayan bir Extension komutu. ToList'ini alıp aşağıda sonuç tabloayu görmenizi sağlıyor.

Burada gerekli testleri yaptıktan sonra artık sonuç fonksyonumuzu oluşturabiliriz.

public IEnumerable<FSYS_USERS> GetActiveUsersShortInfo(bool OnlyActiveUsers)
        {
            //var FSYS_USERSPredicate = PredicateBuilder.True<FSYS_USERS>();

            //if (OnlyActiveUsers)
            //{
            //    FSYS_USERSPredicate.And(z => z.FSTATUS == "A");
            //}

            //var x = from c in MasterContext.FSYS_USERS.AsExpandable().Where(FSYS_USERSPredicate.Compile())
            //        select c;

            Expression<Func<FSYS_USERS, bool>> FSYS_USERSPredicate = p1 => true;

            if (OnlyActiveUsers)
            {
                FSYS_USERSPredicate = FSYS_USERSPredicate.And(z => z.FSTATUS == "A");
            }

            var x = from c in MasterContext.FSYS_USERS.AsExpandable().Where(c => true).Where(FSYS_USERSPredicate.Compile()).OrderBy(o=> o.ADSOYAD)
                    select c;

            return x.ToList();
        }

 

Bu şekilde tam olarak dinamik bir parametreyi Entity Framework yapımıza eklemiş olduk. Method daki AsExpandable ve Compile komutları LinqKit aracılığı ile gelen extension komutlar.

(Güncelleme 25.04.2016) Eğer c# statement linq cümlesinde bir class yada method kullanmak isterseniz. Bunuda düşünmüşler :) tek yapmanız gereken statement sonunda "}" ile linq bölümünü eklemek ve ardına istediğiniz kadar method ve class ekleyebilirsiniz. Writing Methods and Classes in LINQPad Burada detaylı bir şekilde anlatıyor. Denedim çok güzel çalışıyor.

 

İyi çalışmalar.



Dynamic type ile json deserialize etme

clock Aralık 23, 2015 10:39 by author OzgurOzvaris

Merhaba,

Bazen size gelen json data bir servis sağlayıcıdan geliyorsa tamamını deserialize etmek nerede ise imkansız olur. Böyle bir durumda dynamic type'ini kullanarak ihtiyacınız olan veriye daha kolay ulaşabilirsiniz.

 dynamic dd = JsonConvert.DeserializeObject(txtResponseData.Text); 

 clsWeather_Forcast09_Result Weather_Forcast09_Result = new clsWeather_Forcast09_Result(); 

 Weather_Forcast09_Result.Weather_Forcast = new List<clsWeather_Forcast09_Result.clsWeather_Forcast>();  

 clsWeather_Forcast09_Result.clsWeather_Forcast   Weather_Forcast = new clsWeather_Forcast09_Result.clsWeather_Forcast(); 

 foreach (dynamic forecastday in dd.forecast.simpleforecast.forecastday) 

 { 

     Weather_Forcast = new clsWeather_Forcast09_Result.clsWeather_Forcast(); 

     Weather_Forcast.ForcastDate = forecastday.date.day.ToString() + "/" + forecastday.date.month.ToString() + "/" + forecastday.date.year.ToString(); 

     Weather_Forcast.highCelsius = decimal.Parse(forecastday.high.celsius.ToString()); 

     Weather_Forcast.lowCelsius = decimal.Parse(forecastday.low.celsius.ToString()); 

     Weather_Forcast.highFahrenheit = decimal.Parse(forecastday.high.fahrenheit.ToString()); 

     Weather_Forcast.lowFahrenheit = decimal.Parse(forecastday.low.fahrenheit.ToString()); 

     Weather_Forcast09_Result.Weather_Forcast.Add(Weather_Forcast); 

 }

Bu yöntem c# ta tamamen ihtiyaç çözüyor. Ancak vb.net te yine tökezlerseniz. şu yöntemi kullanabilirsiniz.Kaynak için http://stackoverflow.com/questions/20079177/deserializing-json-in-visual-basic bakabilirsiniz. Aşağıdaki kod bloğu size biraz uzun gelebilir. Parça paça dynamic vb typlerı ile ulaşmak istediğim noda ulaşıyorum. daha sonra bir dizi şeklindeki node dan for loop ile dönerek istediğim değerleri topluyorum. Çalışan bir koddur kendim kullandım.

Dim tempforecast = New With {Key .forecast = New Object} 

Dim sFile As String = SimpleTools.RWFile.ReadFile("c:\\testjson\\test.json") 

Dim root = JsonConvert.DeserializeAnonymousType(sFile, tempforecast) 

Dim tempsimpleforecast = New With {Key .simpleforecast = New Object} 

Dim forecast = JsonConvert.DeserializeAnonymousType(root.forecast.ToString(), tempsimpleforecast) 

Dim templstforecastday = New With {Key .forecastday = New Object} 

Dim simpleforecast = JsonConvert.DeserializeAnonymousType(forecast.simpleforecast.ToString(), templstforecastday) 

Dim lstforecastday = simpleforecast.forecastday 

'Dim com As String = post.com 

Dim Weather_Forcast09_Result As New clsWeather_Forcast_09.clsWeather_Forcast09_Result 

Dim Weather_Forcast As New clsWeather_Forcast_09.clsWeather_Forcast09_Result.clsWeather_Forcast 

'DirectCast(DirectCast(dd.forecast,Object).simpleforecast,Object).forecastday 

'For Each forecastday In dd.forecast.simpleforecast.forecastday 

For Each jforecastday In lstforecastday 

    Weather_Forcast = New clsWeather_Forcast_09.clsWeather_Forcast09_Result.clsWeather_Forcast() 

    'Dim tempforecastday = New With {Key .jforecastday = New Object} 

    'Dim forecastday = JsonConvert.DeserializeAnonymousType(jforecastday.ToString(), tempforecastday) 

    Dim tempDate = New With {Key .date = New Object, .high = New Object, .low = New Object} 

    Dim forecastday = JsonConvert.DeserializeAnonymousType(jforecastday.ToString(), tempDate) 

    Dim tempDateDetail = New With {Key .day = "", .month = "", .year = ""} 

    Dim fcDateDetail = JsonConvert.DeserializeAnonymousType(forecastday.date.ToString(), tempDateDetail) 

    Weather_Forcast.ForcastDate = fcDateDetail.day.ToString() + "/" + fcDateDetail.month.ToString() + "/" + fcDateDetail.year.ToString() 

    Dim temphighDetail = New With {Key .celsius = "", .fahrenheit = ""} 

    Dim highDetail = JsonConvert.DeserializeAnonymousType(forecastday.high.ToString(), temphighDetail) 

    Dim templowDetail = New With {Key .celsius = "", .fahrenheit = ""} 

    Dim lowDetail = JsonConvert.DeserializeAnonymousType(forecastday.low.ToString(), templowDetail) 

    Weather_Forcast.highCelsius = Decimal.Parse(highDetail.celsius.ToString()) 

    Weather_Forcast.lowCelsius = Decimal.Parse(lowDetail.celsius.ToString()) 

    Weather_Forcast.highFahrenheit = Decimal.Parse(lowDetail.fahrenheit.ToString()) 

    Weather_Forcast.lowFahrenheit = Decimal.Parse(lowDetail.fahrenheit.ToString()) 

    Weather_Forcast09_Result.Add(Weather_Forcast) 

Next 

oWeather_Forcast_09.Weather_Forcast09_Result = Weather_Forcast09_Result

İyi çalışmalar.

 



Mvc de view ların ayrı dll den gelmesi

clock Eylül 30, 2015 13:33 by author OzgurOzvaris

Merhaba Arkadaşlar,

Bu seferki yazımızda mvc ile ilgili biraz derin bir konudan bahsedeceğiz. Viewların başka dll lerden çağırılması. Malum microsoft mvc projeleri biraz beklenen performansta gelişmiyor. Scoot gu nun bir sunumu ile başlayan microsoftun mvc macerası herkesin ağzının suyunu akıttıktan sonra ne yazıkki diğer birçok microsoft projesi gibi beklenen heyecanla devamı getirilmedi. Microsoftta development dünyasında ki bu genel durgunluk nereye varır bilinmez ancak biz geliştiriciler yine müşteri beklentilerini karşılamak adına çoğu zaman kendi yollarımızı açmak durumunda kalıyoruz.

Standart mvc yapısında herşey aynı proje içinde oluşturulan folderlar üzerinde yapılandırılmış durumda oysaki en basit anlamda bir projenin temel olarak DDD yani Domain Driven Design pattern ile yapılandırılmış projenin en basit anlamda UI (User Interface), BL (Bussiness Layet), DAL (Data Access Layer) katmanları ile yapılandırıldığı var sayılırsa MVC sinin bu her şeyi içine gömülü tek proje mantığı hiçte iş görmeyecektir.

 

Basit bir kaç yöntemle bu yapıyı şu yapıya çevirmek mümkün

 

 

Ancak Büyük bir projeye talipseniz ve projeniz bir çok modülden oluşuyorsa o zaman bu yapıda yeterli olmayacaktır her modülünüzün kendi için de viewlarını conrollerlarını ve bussiness layerlarını barındırması gerekecektir. Bu durumda aşağıdaki makaleler size yol gösterecektir kanaatindeyim.

Compile your asp.net mvc Razor views into a seperate dll

How to create ASP.NET MVC area as a plugin DLL?

http://maxtoroq.github.io/2012/02/aspnet-mvc-plugins.html

https://github.com/RazorGenerator/RazorGenerator

Herkese İyi çalışmalar.



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In