এমভিসি কনফিগার করতে 'UseMvc' ব্যবহার করা এন্ডপয়েন্ট রাউটিং ব্যবহার করার সময় সমর্থিত নয়


119

আমি একটি Asp.Net কোর 2.2 প্রকল্প ছিল।

সম্প্রতি, আমি। নেট কোর ২.২ থেকে সংস্করণটি। নেট কোর 3.0 পূর্বরূপ 8 এ পরিবর্তন করেছি this এই পরিবর্তনের পরে আমি এই সতর্কতা বার্তাটি দেখছি:

এমভিসি কনফিগার করতে 'UseMvc' ব্যবহার করা এন্ডপয়েন্ট রাউটিং ব্যবহার করার সময় সমর্থিত নয়। 'UseMvc' ব্যবহার চালিয়ে যেতে, দয়া করে 'MvcOptions.EnableEndPointRouting = মিথ্যা' 'কনফিগার সার্ভিস' এর ভিতরে সেট করুন।

আমি বুঝতে পারি যে EnableEndpointRoutingমিথ্যাতে সেট করে আমি সমস্যাটি সমাধান করতে পারি, তবে এটি সমাধানের সঠিক উপায় কী এবং এন্ডপয়েন্ট রাউটিংয়ের UseMvc()কার্যকারিতা কেন প্রয়োজন তা আমার জানতে হবে।


2
যথাযথ উপায় সম্পর্কে: এই ডক্স
ডকস.মাইক্রোসফট

উত্তর:


23

তবে এটি সমাধানের সঠিক উপায় কী তা আমার জানতে হবে

সাধারণভাবে, EnableEndpointRoutingপরিবর্তে আপনার ব্যবহার করা উচিত UseMvcএবং সক্ষম করার জন্য বিশদ পদক্ষেপের জন্য আপনি আপডেট রাউটিং স্টার্টআপ কোডটি উল্লেখ করতে পারেন EnableEndpointRouting

কেন এন্ডপয়েন্ট রাউটিংয়ে ইউজএমভিসি () ফাংশন প্রয়োজন হয় না।

জন্য UseMvc, এটি ব্যবহার করে the IRouter-based logicএবং EnableEndpointRoutingব্যবহার করে endpoint-based logic। তারা বিভিন্ন যুক্তি অনুসরণ করছে যা নীচে পাওয়া যাবে:

if (options.Value.EnableEndpointRouting)
{
    var mvcEndpointDataSource = app.ApplicationServices
        .GetRequiredService<IEnumerable<EndpointDataSource>>()
        .OfType<MvcEndpointDataSource>()
        .First();
    var parameterPolicyFactory = app.ApplicationServices
        .GetRequiredService<ParameterPolicyFactory>();

    var endpointRouteBuilder = new EndpointRouteBuilder(app);

    configureRoutes(endpointRouteBuilder);

    foreach (var router in endpointRouteBuilder.Routes)
    {
        // Only accept Microsoft.AspNetCore.Routing.Route when converting to endpoint
        // Sub-types could have additional customization that we can't knowingly convert
        if (router is Route route && router.GetType() == typeof(Route))
        {
            var endpointInfo = new MvcEndpointInfo(
                route.Name,
                route.RouteTemplate,
                route.Defaults,
                route.Constraints.ToDictionary(kvp => kvp.Key, kvp => (object)kvp.Value),
                route.DataTokens,
                parameterPolicyFactory);

            mvcEndpointDataSource.ConventionalEndpointInfos.Add(endpointInfo);
        }
        else
        {
            throw new InvalidOperationException($"Cannot use '{router.GetType().FullName}' with Endpoint Routing.");
        }
    }

    if (!app.Properties.TryGetValue(EndpointRoutingRegisteredKey, out _))
    {
        // Matching middleware has not been registered yet
        // For back-compat register middleware so an endpoint is matched and then immediately used
        app.UseEndpointRouting();
    }

    return app.UseEndpoint();
}
else
{
    var routes = new RouteBuilder(app)
    {
        DefaultHandler = app.ApplicationServices.GetRequiredService<MvcRouteHandler>(),
    };

    configureRoutes(routes);

    routes.Routes.Insert(0, AttributeRouting.CreateAttributeMegaRoute(app.ApplicationServices));

    return app.UseRouter(routes.Build());
}

জন্য EnableEndpointRouting, এটি ব্যবহার করে EndpointMiddleware এন্ড পয়েন্ট করার অনুরোধ রুট।


120

আমি সমাধানটি নীচের অফিসিয়াল ডকুমেন্টেশনে " এএসপি.এনইটি কোর 2.2 থেকে 3.0 পর্যন্ত স্থানান্তরিত " তে পেয়েছি :

এখানে 3 টি পন্থা রয়েছে:

  1. UseMvc বা UseSignalR কে UseEndpPoint সহ প্রতিস্থাপন করুন।

আমার ক্ষেত্রে, ফলাফলটি এর মতো দেখায়

  public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        //Old Way
        services.AddMvc();
        // New Ways
        //services.AddRazorPages();
    }


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();
        app.UseRouting();
        app.UseCors();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}");
        });

    }
}

বা
2. অ্যাডকন্ট্রোলার () এবং ইউজএন্ডপয়েন্টস () ব্যবহার করুন

public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    }


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();
        app.UseRouting();
        app.UseCors();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

    }
}

বা
3. শেষ পয়েন্ট রাউটিং অক্ষম করুন। ব্যতিক্রম বার্তার পরামর্শ হিসাবে এবং ডকুমেন্টেশনের নিম্নলিখিত বিভাগে উল্লিখিত হিসাবে: এমভিসিউইথআউট আউটপয়েন্ট রাউটিং ব্যবহার করুন


services.AddMvc(options => options.EnableEndpointRouting = false);
//OR
services.AddControllers(options => options.EnableEndpointRouting = false);

2
এটি এসপ নেট কোর 3.0.০ এ কাজ করে এবং আমি সহজেই এই অ্যাড ওয়েব এপিআই ব্যবহার করতে পারি
টনি ডং

1
এর services.AddRazorPages();পরিবর্তে (সেই পৃষ্ঠায়) ব্যবহার করার পরামর্শ দেওয়া হচ্ছেservices.AddMvc();
বার্নসবিএ

1
আপনি যদি প্রথম এমভিসি টিউটোরিয়ালটি দিয়ে যাচ্ছেন এবং কোর ২.১ থেকে কোর ৩.০ এ আপগ্রেড করেন তবে এটি একটি ভাল সমাধান । এই সঙ্গে সঙ্গে আমার সমস্যা সমাধান, ধন্যবাদ!
স্পেনসার পোলক

খালি হাড়ের পাতা
ভিক

50

এটি আমার পক্ষে কাজ করেছে ( Startup.csকনফিগার সার্ভিস পদ্ধতিতে যুক্ত করুন):

পরিষেবাদিগুলি.এডডএমভিসি (বিকল্প => বিকল্প। সক্ষম করুনসূচী রাউটিং = মিথ্যা)

2
সহজ উত্তর, কিন্তু দুর্দান্ত উত্তর!
noobprogrammer

এই কোডটি কীভাবে সমাধান করুন বলুন, আমি সমাধানটির বিষয়ে চিন্তা করি না, আমি এটি ইতিমধ্যে জানতাম, আমি কেন এবং কীভাবে জানতে চাই ...
আমির হোসেইন আহমদী

3

NET কোর ফ্রেমওয়ার্কের আপডেটের কারণে আমি এই সমস্যাটি পেয়েছি। সর্বশেষতম .NET কোর 3.0 প্রকাশিত সংস্করণে এমভিসি ব্যবহারের জন্য সুস্পষ্ট অপ্ট-ইন প্রয়োজন requires

যখন কেউ পুরানো .NET কোর (2.2 বা পূর্বরূপ 3.0 সংস্করণ) থেকে .NET কোর 3.0 তে স্থানান্তরিত করার চেষ্টা করে তখন এই সমস্যাটি সর্বাধিক দৃশ্যমান

যদি ২.২ থেকে 3.0 এ স্থানান্তরিত হয় তবে দয়া করে সমস্যাটি সমাধানের জন্য নীচের কোডটি ব্যবহার করুন।

services.AddMvc(options => options.EnableEndpointRouting = false);

.NET কোর 3.0 টেম্পলেট ব্যবহার করা হয়,

services.AddControllers(options => options.EnableEndpointRouting = false);

নীচের মতো ঠিক করার পরে কনফিগার সার্ভিস পদ্ধতি,

এখানে চিত্র বর্ণনা লিখুন

ধন্যবাদ


2

ডটনেট কোর 3.1 এর জন্য

নীচে ব্যবহার করুন

ফাইল: স্টার্টআপ.স পাবলিক অকার্যকর কনফিগার করুন (আইপ্লিকেশনবিল্ডার অ্যাপ্লিকেশন, আইহোস্টিং-পরিবেশ এনভায়রনমেন্ট) {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthentication();
        app.UseHttpsRedirection();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

সমস্ত পরিষেবা কনফিগারেশন লাইন দিয়ে কি করবেন?
ফঞ্চি

0

আপনি ব্যবহার করতে পারেন: কনফিগার সার্ভিস পদ্ধতিতে:

services.AddControllersWithViews();

এবং কনফিগার পদ্ধতির জন্য:

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });

0

এটি আমার জন্য কাজ করেছে। নেট কোর 3.1।

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

-4

নীচে কোড ব্যবহার করুন

app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });

আপনি যদি ব্যাখ্যা করেন যে এই কোডটি কীভাবে সমস্যার সমাধান করে It
রবার্ট কলম্বিয়া

কেবল কোড পোস্ট করা যথেষ্ট উত্তর নয়। কী / কেন / কীভাবে এই কোড প্রশ্নের উত্তর দেবে দয়া করে তা ব্যাখ্যা করুন।
নুরডিগুয়ে

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