Веб-приложение ASP.NET Core не работает вживую, но работает локально - PullRequest
1 голос
/ 15 октября 2019

Я развертываю свое приложение в Azure, но проблема в том, что некоторые методы, в частности методы POST, выдают 404 на работающем сайте, пока они работают локально. Я пытался отладить его с помощью BurpSuite, но кажется, что запросы похожи.

Localhost

Live site:

Контроллер:

[HttpPost]
public IActionResult SavePlan(string PlanDate)
{
    DateTime dateFrom = DateTime.ParseExact(PlanDate, "dd/MM/yyyy", null);

    // Get planCart
    PlanCart planCart = GetPlanCart();

    // Validate MealPlan
    if (!ValidateMealPlan(planCart))
    {
        TempData["Error"] = "Error: MealPlan contains has too many diet restrictions per day.";
        return RedirectToAction("Index");
    }

    // Create and set MealPlan options
    MealPlan mealPlan = new MealPlan();
    mealPlan.dateFrom = dateFrom;
    mealPlan.dateTo = dateFrom.AddDays(7);
    mealPlan.Meals = planCart.returnList().ToArray();

    mealplanRepository.SaveMealPlan(mealPlan);

    return RedirectToAction("Index");
}

Startup.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Identity server
        services.AddDbContext<AppIdentityDbContext>(options =>
            options.UseSqlServer(
            Configuration["Data:EasyMealIdentityServer:ConnectionString"]));

        // Add OrderCustomersServer
        services.AddDbContext<AppMealOrdersCustomersDbContext>(options =>
            options.UseSqlServer(
            Configuration["Data:EasyMealOrdersCustomersServer:ConnectionString"]));

        // EasyMealMealServer
        services.AddDbContext<AppMealsDbContext>(options =>
            options.UseSqlServer(
            Configuration["Data:EasyMealMealServer:ConnectionString"]));

        services.AddTransient<IMealRepository, EFMealRepository>();
        services.AddTransient<IOrderRepository, EFOrderRepository>();
        services.AddTransient<IMealplanRepository, EFMealplanRepository>();

        services.AddIdentity<AppUser, IdentityRole>()
         .AddEntityFrameworkStores<AppIdentityDbContext>()
         .AddDefaultTokenProviders();

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddMemoryCache();
        services.AddSession();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseSession();

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

        app.UseCookiePolicy();
    }
}

Форма в представлении (Index.cshtml):

        <form id="PlanForm" asp-action="SavePlan" asp-controller="Plan" method="post">
        <input id="PlanDate" name="PlanDate" value="" type="hidden" />
        <button class="btn btn-success" type="submit">Save selection</button>
    </form>

PlanDate,требуемый параметр устанавливается через JavaScript. Вы можете увидеть в запросе в BurpSuite, что он получает отправку. Я подумал, что, может быть, в этом проблема.

Если у кого-то есть идея, что может пойти не так, это будет с благодарностью!

1 Ответ

1 голос
/ 15 октября 2019

** редактировать 2: вам нужно отформатировать дату на стороне клиента и использовать серверную часть clientinfo, чтобы избежать несоответствия мм / дд / гггг против дд / мм / гггг!

редактировать 1: вы передаете косые чертыв дате? это сломает это. Вместо этого передайте дату с помощью тире или экранируйте ее в javascript. **

Щелкните правой кнопкой мыши проект, выберите «Свойства», перейдите на вкладку «Интернет», прокрутите вниз, чтобы увидеть правильный URL-адрес iis с портом.

для ядра .net используйте launchSettings.json и найдите URL-адрес приложения.

Когда вы пытаетесь опубликовать в нем сообщение, убедитесь, что вы выполняете localhost:<port>\<controller>\<action>

, поэтому контроллервероятно дома, действие - план сохранения, и после этого вам нужно \ plandate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...