MVC Custom ActionFilter

Merhaba Arkadaşlar,

Bu yazımda sizlere MVC projelerinde sıkça kullandığımız filterlardan bahsedeceğim.Öncelikle yeni bir MVC projesi açıyorum.Controller adını Account olarak tanımladım.Daha sonra hemen bir adet CustomActionFilter  açıp aşağıdaki gibi kodlamamı yapıyorum.

resim2

Ben burada iki methodu inceledim.ActionFilter yazdığım için hemen açtığımız action üzerine attribute olarak tanımlamamı yapıyorum.

resim3

 

Bu attribute ‘ü kullandığınız actionlara artık filter ile izleme yapabiliyorsunuz.Projeyi çalıştırdıktan sonra http://localhost /controller istekte bulunduğumda aşağıdaki output çıktısını alıyor olacaksınız.

resim1

Buradan da anlaşılacağı üzere  Actionları istediğimiz gibi izleyebiliriz.Bu attribute istenilirse Controller üzerine de ekleyerek genel olarak tüm actionlara filter uygulayabilirsiniz.

Bol kodlu günler dilerim 🙂

angularJS web API

Merhaba Arkadaşlar,

Bu yazımda sizlere angular JS kullanarak web apiden nasıl data okunur onu göstereceğim.

Bunun için öncellikle bir adet web api projesi açalım.Ben controllerım adını products olarak değiştiriyorum.

resim1

Daha sonra productController adında javascript dosyası ekliyorum projeme.

resim2

Son olarak bu işlemi view üzerinde bağlayarak gösteriyorum.

resim3

resim4

Web API Authentication for Mobile Application

Merhaba Arkadaşlar,

Bu makalemde sizlere mobile uygulamlara açtığımız restful servislerde nasıl güvenlik önlemleri alabiliriz bunun hakkında bilgi vermeye çalışacam.Öncelikle ben bir web API uygulaması açıyorum.Bu uygulamayı açtıktan sonra nuget’tan aşağıdaki eklemeleri projemize yapıyouz.

install-package Microsoft.Owin

Microsoft.Owin.Cors

Microsoft.Owin.Host.SystemWeb

Microsoft.Owin.Securit

Microsoft.Owin.Security.Cookies

Microsoft.Owin.Security.OAuth

Microsoft.AspNet.WebApi

Microsoft.AspNet.Web.Optimization

Microsoft.AspNet.WebApi.WebHost

bu eklemeleri yaptıktan sonra artık kod üzerinde işlemlerimizi yapmaya başlayalım.

public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();

ConfigureOAuth(app);

WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);

}

public void ConfigureOAuth(IAppBuilder app)
{

OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{

AllowInsecureHttp = true,
TokenEndpointPath = new PathString(“/authtoken”),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};

// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

}

}


public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
bool isValidUser = false;
context.OwinContext.Response.Headers.Add(“Access-Control-Allow-Origin”, new[] { “*” });

if(context.UserName == “brk” && context.Password == “123”)
{
isValidUser = true;
}

if (!isValidUser)
{
context.SetError(“invalid_grant”, “Kullanıcı ad yada şifre hatalı”);
return;
}

var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(“sub”, context.UserName));
identity.AddClaim(new Claim(“role”, “user”));

context.Validated(identity);
}
}


public class ProductsController : ApiController

{

public ProductsController()

{

db = new SucuDBEntities();

}

SucuDBEntities db;

// GET api/values

[HttpGet]

[Authorize]

public List GetProducts()

{

return db.Products.Select(x => new ProductDTO { Name=x.ProductName, Price=x.UnitPrice,Id=x.ProductID}).ToList();

}

}


Şimdi istersen Fiddler composer kullanarak deneyin isterseniz direk mobile uygulama HttpPost ve HttpGet ilede deneyebilirsiniz.

http://localhost:2418/authtoken adresine post isteği ile

Request’in body kısmına aşağıdaki kod satırını

grant_type=password&username=brk&password=123

ile istekte bulunuyorum.Daha sonra response da aşağıdaki json sonucu göreceğiz.

{
"access_token":"fGRssefsd-123sdfFSFczzfse...",
"token_type":"bearer",
"expires_in":86399
}
burada bizim için access_token idsi önemli.Bu id ile artık ProductController’dan güvenli bir şekilde veri çekebileceğiz.Son olarak http://localhost:2418/api/Products ‘a Get ile istekte bulunduğumuzda aşağıdaki Requestheader ile erişimimiz başarılı bir şekilde gerçekleşecek.

Authorization: Bearer fGRssefsd-123sdfFSFczzfse…

Kodumuzun hayrını görün :))