Razor Pages / ASP.NET CORE: проблема маршрутизации на развернутом сайте (ошибка 404) - PullRequest
0 голосов
/ 16 октября 2019

Когда я развертываю свой сайт, он изменяет сгенерированную ссылку для определенных элементов. На моем локальном сервере ссылка оказывается http://localhost:49377/Recipe/1, и она работает, когда я нажимаю на нее. На моем развернутом сервере он показывает thedeployedsserver.net/Home/Index/1?page=%2FRecipe.

Это ссылка в Menu.cshtml, которая изменяется:

<h3><a asp-page="/Recipe" asp-route-id="@recipe.Id">@recipe.Name</a></h3>

Я думаю, что это может быть какая-то проблема с маршрутизацией, но я не знаю, что это такое. Я все еще просматриваю документацию, но, надеюсь, кто-то может помочь мне или указать мне правильное направление.

У меня есть следующий код в моем Menu.cshtml

@page
@{
    var recipes = await RecipesService.GetAllAsync();
}
@section Title {
    <h2 class="title">My Favorite Recipes</h2>
}

<div class="row recipes">

    @foreach (var recipe in recipes)
    {
        <div class="recipe col-md-4 burgerBlackBoard">
            <img class="img burgerImage" src="@recipe.GetInlineImageSrc()" />
            <h3><a asp-page="/Recipe" asp-route-id="@recipe.Id">@recipe.Name</a></h3>
        </div>

    }
</div>

Этомоя страница Recipe.cshtml:

@page "{id}"
@{
    var id = long.Parse((string)RouteData.Values["id"]);
    var recipe = await RecipesService.FindAsync(id);

    ViewData["Title"] = recipe.Name;
}

    <div class="row recipe burgerBlackBoard">
        <div class="col-6 ">
            <div class="col-8 text-center">
                <span class="description">
                    @recipe.Description
                </span>
            </div>
            <div class="col-2 text-center">
                <img class="img burgerImage" src="@recipe.GetInlineImageSrc()" />
            </div>
            <hr />
        </div>
        <div class="ingredients col-6">
            <h3 class="text-center">Ingredients</h3>
            <ul>
                @foreach (var ingredient in recipe.IngredientsList)
                {
                    <li>@ingredient</li>
                }
            </ul>
        </div>
    </div>

Мой файл startup.cs, содержащий мою маршрутизацию:

public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
        services.AddMvc().AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizeFolder("/Admin");
            options.Conventions.AuthorizeFolder("/Account");
            options.Conventions.AllowAnonymousToPage("/Account/Login");
        }); //dependency injection
        services.AddTransient<IRecipesService, RecipesService>();


    }

    // 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();
        }

        app.UseAuthentication();
        app.UseStaticFiles();
        app.UseMvcWithDefaultRoute();

    }
}

Ответы [ 3 ]

0 голосов
/ 16 октября 2019

В вашей ссылке изменить / Рецепт на ./Recipe

<h3><a asp-page="./Recipe" asp-route-id="@recipe.Id">@recipe.Name</a></h3>
0 голосов
/ 17 октября 2019

Исправлена ​​проблема. Кажется, у меня была отдельная модель с именем Recipe и страница с именем Recipe, и их имена были противоречивыми. Я только что создал еще одну страницу с именем Burgers, и она исправила конфликт с проблемой маршрутизации.

0 голосов
/ 16 октября 2019

Он думает, что вы используете домашний контроллер и представление индекса.

вместо asp-page вы можете использовать asp-controller и asp-action. Если вы поделитесь настройками своего маршрута, я могу дать лучший ответ.

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