15. ASP.NET MVC とは
ASP.NET 上で動くWebアプリケーションFW
ASP.NET はIISで動かすのがほとんど
WebFormsと使って比較的モダンな開発スタイル
「設定より規約」(Ruby on Rails like)
フルスタック「ではない」
オープンソース
.NET Core よりずっと前から
15
44. Authentication Filters in ASP.NET Web API 2
http://www.asp.net/web-api/overview/security/authentication-filters 44
45. public class MyCodeAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var idStr = httpContext.Request.RequestContext.RouteData.Values["id"] as string;
int id;
if (!int.TryParse(idStr, out id))
{
return false;
}
var user = httpContext.User;
return user.CanAccessCode(id);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden,
"コードが存在しないか、見る権限がありません");
}
}
45
46. public class MyCodeAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var idStr = httpContext.Request.RequestContext.RouteData.Values["id"] as string;
int id;
if (!int.TryParse(idStr, out id))
{
return false;
}
var user = httpContext.User;
return user.CanAccessCode(id);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden,
"コードが存在しないか、見る権限がありません");
}
}
46
47. [Authorize]
public class CodesController : Controller
{
// GET: Codes
public ActionResult Index()
{}
[MyCodeAuthorize]
// GET: Codes/Detail/5
public ActionResult Detail(int id)
{}
// GET: Codes/Create
public ActionResult Create()
{}
}
47
59. public class UILanguageFilter : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
var lang = filterContext.RequestContext.HttpContext.Request.QueryString.GetValues("lang");
if (lang != null)
{
var l = lang.FirstOrDefault();
if (l != null)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(l);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(l);
var cookie = new HttpCookie("favoritelang", l) { Expires = DateTime.MaxValue };
filterContext.HttpContext.Response.Cookies.Add(cookie);
return;
}
}
}
//続く
59
60. //続き
var setLang = filterContext.HttpContext.Request.Cookies.Get("favoritelang");
if (setLang != null)
{
var l = setLang.Value;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(l);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(l);
}
}
60