আপনি কীভাবে এএসপি.নেট কোরে ছোট ছোট রাউটিং প্রয়োগ করবেন?


90

ASP.NET 4 এই হিসাবে সহজ হিসাবে ছিল routes.LowercaseUrls = true;মধ্যে RegisterRoutesঅ্যাপের জন্য হ্যান্ডলার।

এটি অর্জনের জন্য আমি এএসপি.নেট কোরের সমতুল্য খুঁজে পাচ্ছি না। আমি মনে করি এটি এখানে হবে:

app.UseMvc(configureRoutes =>
{
    configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});

কিন্তু configureRoutesদেখার অনুমতিতে কিছুই নেই ... যদি না এমন কোনও এক্সটেনশন পদ্ধতি না থাকে যা আমি সম্ভবত দস্তাবেজে খুঁজে পাই না?

উত্তর:


192

এএসপি.নেট কোরের জন্য:

ক্লাসের ConfigureServicesপদ্ধতিতে নিম্নলিখিত লাইনটি যুক্ত করুন Startup

services.AddRouting(options => options.LowercaseUrls = true);

একটি মন্তব্য হিসাবে উত্তরের জন্য Skorunka ধন্যবাদ। আমি ভেবেছিলাম এটি সত্যিকারের উত্তরে প্রচার করার মতো।


35
AddMvc()আপনি আপনার Startup.ConfigureServices()পদ্ধতিতে প্রকৃতপক্ষে কল দেওয়ার আগে আপনার এটি অবশ্যই রাখা উচিত । AddRouting()যা আপনার পরিষেবা সংগ্রহের উপর নির্ভরতা যুক্ত করার জন্য পদ্ধতিগুলির বিভিন্নতা AddMvc()ব্যবহার করেও ডাকা হয় Try। সুতরাং যখন এটি দেখেছে যে রাউটিং নির্ভরতা ইতিমধ্যে যুক্ত করা হয়েছে, এটি AddMvc()সেটআপ যুক্তির সেই অংশগুলি এড়িয়ে যাবে ।
নিক অ্যালব্রেক্ট

আমার উত্তর থেকে সঠিক উত্তরটিতে স্যুইচ করাটি এসপ 4-তে মূল স্থানান্তরিত হওয়ার সময়।
মারিওচ্যাচ

31

এএসপি.নেট কোর সংস্করণ> = 2.2 এ আপডেট

থেকে ASP.NET কোর 2.2 , সহ ছোট হাতের আপনি আপনার করতে পারেন রুট ড্যাশ ব্যবহার ConstraintMapযা আপনার রুট করতে হবে /Employee/EmployeeDetails/1করতে /employee/employee-details/1পরিবর্তে /employee/employeedetails/1

এটি করার জন্য, প্রথমে SlugifyParameterTransformerক্লাসটি তৈরি করা উচিত:

public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object value)
    {
        // Slugify value
        return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
    }
}

এএসপি.নেট কোর ২.২ এমভিসির জন্য:

ইন ConfigureServicesপদ্ধতি Startupশ্রেণী:

services.AddRouting(option =>
{
    option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
});

এবং রুট কনফিগারেশন নিম্নলিখিত হিসাবে হওয়া উচিত:

app.UseMvc(routes =>
{
     routes.MapRoute(
        name: "default",
        template: "{controller:slugify}/{action:slugify}/{id?}",
        defaults: new { controller = "Home", action = "Index" });
});

ASP.NET কোর 2.2 ওয়েব API এর জন্য:

ইন ConfigureServicesপদ্ধতি Startupশ্রেণী:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options => 
    {
        options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

এএসপি.নেট কোর> = 3.0 এমভিসি এর জন্য:

ইন ConfigureServicesপদ্ধতি Startupশ্রেণী:

services.AddRouting(option =>
{
    option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
});

এবং রুট কনফিগারেশন নিম্নলিখিত হিসাবে হওয়া উচিত:

app.UseEndpoints(endpoints =>
{
      endpoints.MapAreaControllerRoute(
          name: "AdminAreaRoute",
          areaName: "Admin",
          pattern: "admin/{controller:slugify=Dashboard}/{action:slugify=Index}/{id:slugify?}");

      endpoints.MapControllerRoute(
          name: "default",
          pattern: "{controller:slugify}/{action:slugify}/{id:slugify?}",
          defaults: new { controller = "Home", action = "Index" });
});

এএসপি.নেট কোর> = 3.0 ওয়েব এপিআই এর জন্য:

ইন ConfigureServicesপদ্ধতি Startupশ্রেণী:

services.AddControllers(options => 
{
    options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
});

এএসপি.নেট কোর> = 3.0 রেজার পৃষ্ঠাগুলির জন্য:

ইন ConfigureServicesপদ্ধতি Startupশ্রেণী:

services.AddRazorPages(options => 
{
    options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer()));
})

এটি /Employee/EmployeeDetails/1রুট করবে/employee/employee-details/1


আমি এই কোড এবং অফিসিয়াল মাইক্রোসফ্ট কোডটিও চেষ্টা করেছিলাম, তবে "স্লুগাইফাই" পরামিতি ট্রান্সফর্মারের কোনও প্রভাব নেই। এটি কেবল রাউটিং সিস্টেম দ্বারা উপেক্ষা করা হয়েছে (যাতে ইউআরএলগুলি ড্যাশযুক্তগুলিতে প্রতিস্থাপন করা হয় না)। নিজেকে যাচাই করতে আমি লগারটি ট্রান্সফর্মআউটবাউন্ড () পদ্ধতিতে রেখেছি, কিন্তু সেখান থেকে কোনও কল নেই।
ব্যবহারকারী3172616

ঠিক আছে! আমাকে চেক করুন!
তানভীরআরজেল

@ user3172616 আমি এখনই এটি পরীক্ষা করে দেখছি! এটি প্রত্যাশার মতো কাজ করছে! যেমন উত্পন্ন রুট employee-details। আপনি কি আমাকে আপনার কনফিগারেশন দেখাবেন?
তানভীরআরজেল

@ ইউজার 3172616 আপনি যে রুটটি পরীক্ষা করেছেন তাতে কি অ্যাট্রিবিউট রাউটিং ব্যবহার করছেন?
তানভীরআরজেল

আমি ভিজুয়াল স্টুডিওতে ব্র্যান্ড নিউ কোর ভি 2.2 সমাধানে স্ট্যান্ডার্ড রাউটিং অ্যাপ্রোচ (অ্যাট্রিবিউট রাউটিং নয়) ব্যবহার করি। দুটি স্ক্রিনশট রয়েছে (সি # কোড এবং .cshtML কোড)। আমি কোনও প্রভাব ছাড়াই লিঙ্কগুলি বিভিন্নভাবে উত্পন্ন করার চেষ্টা করেছি। imgur.com/a/L8dCF6c
user3172616

20

অন্যান্য উত্তরগুলি ইঙ্গিত হিসাবে, যোগ:

services.Configure<RouteOptions>(options => options.LowercaseUrls = true);

আগে

services.AddMvc(...)

দুর্দান্ত কাজ করে, তবে আমি এটি যুক্ত করতে চাই আপনি যদি পরিচয় ব্যবহার করেন তবে আপনারও এটির প্রয়োজন হবে:

services.AddIdentity<IdentityUser, IdentityRole>(options =>
{
    var appCookie = options.Cookies.ApplicationCookie;
    appCookie.LoginPath = appCookie.LoginPath.ToString().ToLowerInvariant();
    appCookie.LogoutPath = appCookie.LogoutPath.ToString().ToLowerInvariant();
    appCookie.ReturnUrlParameter = appCookie.ReturnUrlParameter.ToString().ToLowerInvariant();
});

এবং স্পষ্টতই, উভয় প্রতিস্থাপন করুন IdentityUser, এবং IdentityRoleপ্রয়োজনে নিজের ক্লাসের সাথে।

আমি এটি কেবল নেট নেট এসডিকে 1.0.4 এবং 1.0.5 রানটাইম দিয়ে পরীক্ষা করেছি।


কনফিগার করুন <রুটওপশনস> () সেরা উত্তর ইমো: ছোট এবং সরাসরি বিন্দুতে (
এমভিসি

12

সমাধান খুঁজে পেয়েছি।

সমাবেশে :, Microsoft.AspNet.Routingএবং Microsoft.Extensions.DependencyInjectionনেমস্পেসে আপনি আপনার ConfigureServices(IServiceCollection services)পদ্ধতিতে এটি করতে পারেন :

services.ConfigureRouting(setupAction =>
{
    setupAction.LowercaseUrls = true;
});

15
এএসপি নেট এমভিসি কোরের জন্য: পরিষেবাদি.এডআউটআউটিং (অপশন => {অপশনস.লওয়ারকেস ইউআরএলস = সত্য;});
Skorunka František

মাইক্রোসফ্ট.এক্সটেনশনস.ডেক্সডেন্সিআইনিজেশন ইন মাইক্রোসফ্ট.এস্পনেটকোর.আরউটিং.ডিল
স্কোরুনকা ফ্রেঞ্চিয়েক

4
এটি আরটিএম এর আগে সত্য ছিল, এখন আপনার ব্যবহার করা উচিত। কনফিগার রৌটিংয়ের স্থলে রচনা করুন
ইয়ভেস শেল্পে

1

পরিচয়ের জন্য, @ জর্জে ইয়েনেস ডিয়েজের উত্তরটি কাজ করে না ASP.NET Core 2.2( আমার মনে হয় ২.x ), সুতরাং আপনি যদি পরিচয় এবং এএসপি.নেট কোর ২.২ (২.x) ব্যবহার করেন তবে সমাধানটি এখানে দেওয়া হয়েছে:

services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = "/account/login";
    options.ReturnUrlParameter = "returnurl";
    ...
});

রেফারেন্স: এএসপি.নেট কোর পরিচয় কনফিগার করুন


0

আমার এটি রেজিস্টাররুটে :: রুটকনফিগে ছিল:

ways.LowercaseUrls = সত্য;

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.