Dec 18, 2016

ASP.Net MVC ရဲ့ Route Config အကြောင်း

Ko Sagaing


Routing ဆိုတာဘာလည်း။
ASP.Net MVC မှာ Routing ဟာ MVC ရဲ့ အဓိက လုပ်ဆောင်ချက် တစ်ခုဖြစ်တယ်။  Routing ဆိုတာ Controller တွေရဲ့ Action တွေကို Request လုပ်ဖို့ရန် Mapping ပြုလုပ်တဲ့ URL Pattern (ပုံစံ) ကိုပြောတာ ဖြစ်တယ်။  ASP.Net MVC Project တစ်ခုမှာ အသင့်သတ်မှတ်ထားတဲ့ Rout Mapping ပုံစံက...

http:///{controller}/{action}/{id} ဆိုပြီးသတ်မှတ်ထားတယ်။  ဥပမာ Physical ပုံစံက...
http://www.domain.com/Employee/Edit/id=1 ဒီလိုတွေ့နိုင်သလို
http://www.domain.com/Employee/Edit/1 ဒီလိုလည်းတွေ့နိုင်တယ်။

Configuration ဆိုတာဘာလည်း။
Computer နယ်ပယ်ထဲမှာ အမြဲကြားနေရတဲ့ စကားလုံးတစ်ခုဖြစ်တဲ့ Configuration ဆိုတာ ထည့်သွင်းသည်။  သတ်မှတ်သည်။ လို့ အဓိပ္ပာယ် ရပါတယ်။  ASP.Net MVC မှာ Route တွေကို Configuration လုပ်ဖို့ရန်အတွက် Class ဖိုင် တစ်ဖိုင်ပါပါတယ်။  အဲ့ဖိုင်နာမည်က RouteConfig.cs ဖိုင်ပါ။  အဲ့ဒီဖိုင်ထဲမှာ ASP.Net MVC Application တစ်ခုအတွက် Route တစ်ခုသတ်မှတ်ပြီးသားလည်း ပါပါတယ်။  RouteConfig.cs ဖိုင်ထဲမှာ အောက်ဖေါ်ပြပါအတိုင်း Code တွေကို တွေ့မြင်နိုင်ပါတယ်။
ဒီ Class ဖိုင်ထဲမှာ RegisterRoutes ဆိုတဲ့ void method တစ်ခုရှိတယ်။  သူ့ထဲမှာ အရင်ဆုံး စတွေ့ရမှာက routes.IgnoreRoute ဆိုတာတွေ့လိမ့်မယ်။  ကျွန်တော်တို့ Application တစ်ခုမှာ Route မလုပ်စေချင်တဲ့ နေရာတွေကို သတ်မှတ်ချင်တဲ့အခါမှာ သုံးတဲ့ လုပ်ဆောင်ချက်ဖြစ်တယ်။ ဖိုင်ထဲမှာ အသင့်သတ်မှတ်ထားတဲ့ Code ကတော့ .axd extension နှင့်ဆုံးတဲ့ resource တွေနှင့် သူ့နောက်က လိုက်တဲ့ဟာတွေ အကုန်လုံးကို route မလုပ်စေချင်တဲ့အတွက် ကန့်သတ်ထားတာဖြစ်တယ်။  အကယ်လို့ ကျွန်တော်တို့က Employee Controller ကို Route မလုပ်စေချင်ဘူး ဆိုပါစို့ ဘာလို့လည်းဆိုတော့ Employee နှင့်ပတ်သတ်တဲ့ Actions တွေမှာ Error ဖြစ်နေတဲ့အတွက် ပြင်နေတယ်၊ ဒါမှမဟုတ် ပြည့်စုံမှုမရှိသေးတဲ့အတွက် Route ကိုပိတ်ထားချင်တယ်ဆိုရင် IgnoreRoute ကိုသုံးလို့ရတယ်။  ဘယ်လိုသုံးမလည်းဆိုတော့...

routes.IgnoreRoute("Employee");

ဆိုပြီး ရေးထားရင် Employee Controller ကို Application က Route မလုပ်တော့ဘူး။  လုပ်ခဲ့ရင်လည်း Error တစ်ခုတက်လိမ့်မယ်။  နောက်တစ်ကြောင်းက routes.MapRoute သူကကြတော့ ဘာလုပ်တာလည်းဆိုတော့ ရှင်းပါတယ်။  Route Mapping လုပ်တာဖြစ်တယ်။ သူ့ထဲမှာ ကြည့်ရင် name, url, defaults ဆိုပြီးပါတယ်။ name က Route နာမည် url က သူအလုပ်လုပ်မယ့် map pattern (ပုံစံ) defaults ကတော့ Application စပြီး အလုပ်လုပ်တဲ့အခါမှာ အရင်ဆုံး စအလုပ်လုပ်မယ့် Controller နှင့် Action နာမည် ပြီးရင် id ဆိုတာကတော့ Action မှာ လိုအပ်ရင် ထည့်သုံးမယ့် parameter သူကတော့ ရှိရင်လည်း ရှိမယ် မရှိရင်လည်း မရှိဘူးဆိုတဲ့ အနေအထား ဖြစ်တယ် ဒါကြောင့် UrlParameter.Optional ဆိုပြီး သတ်မှတ်ထားတာဖြစ်တယ်။  သူ့နောက်မှာ နောက်ထပ် constraints ဆိုတာ ထပ်ထည့်လို့ရသေးတယ် ဥပမာ
Employee ဆိုတဲ့ Route မှာ constraints ဆိုတာထည့်ထားတယ်။  Employee Controller ရဲ့ Edit ဆိုတဲ့ Action မှာ ထည့်ထားတယ်။  Default Route မှာ ထည့်ရင် Error တက်မယ် ဘာလို့လည်းဆိုတော့ ဒီ Application ကို Run လိုက်ရင် Default Route ပုံစံအရ အခုလို Browser မှာ ဥပမာ ဒီလို မြင်ရလိမ့်မယ်...

http://localhost:51255/Home/Index 

Home နှင့် Index ကပါလည်းရတယ် မပါလည်းရတယ် အဲ့ဒီမှာ Home Controller ရဲ့ Actions တွေမှာ id ဆိုတဲ့ Parameter မသုံးဘူး မသုံးတဲ့အတွက် constraints ထည့်ခဲ့ရင် Error တက်မှာဖြစ်တယ်။  Employee Controller မှာကြတော့ Edit, Delete, Detail စတာတွေမှာ id ဆိုတာ သုံးတယ် အဲ့အတွက် Error တက်မှာ မဟုတ်ဘူး။  အကယ်လို့ ဒီလိုဆိုရင် Error တက်မယ်...

http://localhost:51255/Employee/Edit/Kyaw Kyaw

ဘာလို့လည်းဆိုတော့ id အတွက်သတ်မှတ်ထားတဲ့ constraints က \d+ ဆိုတာ digit သို့ number အတွက်ပဲ သတ်မှတ်ထားတာ အခု URL မှာ id နေရာမှာ Kyaw Kyaw ဖြစ်နေတဲ့အတွက် Error တက်မှာဖြစ်တယ်။

အိုခေ အခုထိ ကျွန်တော့်ပြောခဲ့တဲ့ Routing အမျိုးအစားက Convention Routing ဖြစ်တယ်။  Routing မှာ ၂မျိုးရှိတယ်။

၁) Convention Routing ရယ်
၂) Attribute Routing ဆိုပြီးတော့ ၂မျိုးရှိတယ်။

Convention Routing က အရမ်း General ဖြစ်တယ်။  သက်ဆိုင်ရာ Actions တွေအတွက် လိုအပ်သလို အမည်တွေ သတ်မှတ်လို့မရဘူး။  အဲ့ဒီ အားနည်းချက်တွေကြောင့် MVC 5 ကစပြီး Attribute Routing ပါလာတယ်။  သူက သုံးရတာ အရမ်းအဆင်ပြေတယ်။  သက်ဆိုင်ရာ Actions တွေအတွက် Attribute တွေ သတ်မှတ်လို့ရတယ်။  Convention Routing ကို Configure လုပ်မယ်ဆိုရင် RouteConfig.cs ဖိုင်ထဲမှာ လုပ်ရုံပဲ Attribute Routing ကြတော့ RouteConfig.cs ဖိုင်ထဲမှာ Attribute Routing ကိုသုံးဖို့ အောက်မှာ ပြထားတဲ့ Code တစ်ကြောင်းရေးပေးရတယ်။

routes.MapMvcAttributeRoutes();

ကျန်တဲ့ Attribute တွေကိုတော့ Controller ရဲ့ Actions တွေထဲမှာ လိုက်ရေးရတယ်။  Application တစ်ခုမှာ Convention Routing နှင့် Attribute Routing နှစ်မျိုးလုံး ပေါင်းစပ်သုံးလို့ရတယ်။  Attribute Routing ကိုဘယ်လိုသုံးလည်းဆိုတာ နမူနာအနေနှင့် ပြောရမယ်ဆိုရင်...ဥပမာ Employee Controller ထဲမှာ Index ဆိုတဲ့ ActionResult တစ်ခုရှိတယ် ဆိုကြပါစို့...ပုံမှန်အားဖြင့် Employee Controller ရဲ့ Index ကို အလုပ်လုပ်ရင် Browser မှာ အောက်ပါအတိုင်း URL ကိုတွေ့ရမှာ ဖြစ်တယ်။

http://localhost:51255/Employee

Index ဟာ Controller တစ်ခုရဲ့ Default ActionResult ဖြစ်တဲ့အတွက် URL မှာ မပါတာဖြစ်တယ်။  ထည့်လည်းရတယ်။  ဥပမာ...

http://localhost:51255/Employee/Index

ဒီ URL နှစ်ခုဟာ အတူတူပဲဖြစ်တယ်။  အခုကျွန်တော် Index ActionResult မှာ Attribute ထည့်မယ်။  Attribute Routing ကိုသုံးချင်တဲ့အတွက် ဒါဆိုရင်...

[Route("Employee/All")]
public ActionResult Index()
{
...........
...........
...........
}

ဒီ ActionResult မှာ [Route("All")] ဆိုတာထည့်ထားတယ် အဲ့ဒါက Route လုပ်ဖို့ Attribute ပဲဖြစ်တယ်။  ဒီ Action ကိုအလုပ်လုပ်ဖို့ရန် Browser မှာ ဘယ်လို Route လုပ်ရမှာလည်းဆိုတော့...

http://localhost:51255/Employee/All

အခုလိုမျိုး Route လုပ်မှ အလုပ်လုပ်မှာဖြစ်တယ်။  အကယ်၍ Employee ဆိုတဲ့ Route Attribute ကို ActionResult မှာထည့်လည်းရတယ် တကယ်လို့ Employee ဆိုတဲ့ Route Attribute ဟာ အခု Controller ရဲ့ Actions တွေအကုန်လုံးအတွက် အသုံးပြုမယ့် Attribute ဖြစ်နေတယ်ဆိုရင် Controller မှာ Configure လုပ်ဖို့ RoutePrefix ဆိုတာရှိတယ် အောက်ပါအတိုင်း Configure လုပ်လို့ရတယ်။

[RoutePrefix("Employee")]
public class EmployeeController : Controller
{
.......................
.......................
.......................
}

ဒါဆိုရင် ဒီ Controller ကို Route လုပ်ရင် Employee Attribute မှ တဆင့် အခြား ActionResult တွေအလုပ်လုပ်မှာ ဖြစ်တယ်။  အောက်ပါ ပုံစံအတိုင်း ကျွန်တော့်တို့ Visual Studio ထဲမှာ တွေ့ရမှာပါ။


အဲ့ဒီမှာ Detail ActionResult ဟာ Index နှင့်မတူပဲ {id} ဆိုတာပါနေတယ်။  အဲ့ဒါက parameter id ကိုကိုယ်စားပြုတာပဲဖြစ်တယ်။  ဒီလို {id} ကိုသတ်မှတ်တဲ့အခါမှာ နောက်ထပ် constraints တွေထည့်လို့ရတယ်။  ဥပမာ...

[Route("EmployeeId/{id:int}")] ဒီ Config က id ကို integer ပဲလက်ခံမယ်လို့ သတ်မှတ်တာဖြစ်တယ်။ အကယ်၍ string ဖြစ်တယ်ဆိုရင် error ဖြစ်မယ်။  ဥပမာ...

http://localhost/Employee/EmployeeId/Kyaw Kyaw ဒီ URL နှင့် Route လုပ်ခဲ့မယ်ဆိုရင် error ဖြစ်မယ်။

နောက်ထပ်ဘာတွေ သတ်မှတ်လို့ ရသေးလည်းဆိုတော့...
[Route("EmployeeId/{id=3}")]  Default value သတ်မှတ်တာဖြစ်တယ်။  id မှာ value တစ်ခုမှပါမလာရင် 3 ကို သတ်မှတ်မှာဖြစ်တယ်။  Route Constraint တွေကို ဒီမှာ ထပ်ပြီးလေ့လာနိုင်ပါတယ်။  Attribute Routing ဟာ e-commerce လိုမျိုး site တွေမှာ သုံးရင် SEO အတွက် Convention Routing ထက် ပိုမိုကောင်းမွန်တဲ့ Route တွေဖန်တီးနိုင်တယ်။  ဒီ Routing နှင့်ပတ်သက်တဲ့ အကြောင်းကို Video အနေနှင့် ကြည့်ချင်တယ်ဆိုရင်...



ကျွန်တော်ဖန်တီးထားတဲ့ ဒီ Video မှာကြည့်လို့ရပါတယ်။

မှတ်စုရေးသူအကြောင်း

Ko Sagaing / Software Engineer

နာမည်အရင်းမှာ လှိုင်မင်းထက်ဖြစ်ပြီး၊ ကိုစစ်ကိုင်းဆိုသည့် နာမည်ပြောင်နှင့် မိတ်ဆွေ၊ သူငယ်ချင်းများက ရင်းနှီးစွာခေါ်ကြပါသည်။ ယခင်ကမြန်မာနိုင်ငံတွင် သင်ကြားရေး နှင့် Software Development လုပ်ငန်းများတွင် ဝင်ရောက်လုပ်ကိုင်ခဲ့ပြီး၊ ယခုလက်ရှိမှာ စင်ကာပူနိုင်ငံရှိ နည်းပညာကုမ္ပဏီတစ်ခုတွင် ဝင်ရောက်လုပ်ကိုင်နေပါသည်။

0 ခုမှတ်ချက်ပေးထားတယ်။:

Post a Comment

ကိုစစ်ကိုင်း၏ မှတ်စုများ. Powered by Blogger.