Обслуживание динамического XML-файла из .NET Core Web Application - PullRequest
0 голосов
/ 24 октября 2019

На моем веб-сайте .NET Core 2.2 в моем BlogController есть метод контроллера, который генерирует файл sitemap.xml:

public ActionResult SiteMap()
{
     // logic here
     return Content("<sitemap>...</sitemap>", "text/xml");
}

У меня настроен этот маршрут, чтобы карта сайта былавывод на https://mysite/sitemap

routes.MapRoute(
                    name: "sitemap",
                    template: "sitemap",
                    defaults: new { controller = "Blog", action = "SiteMap" });

Это работает, так как доступ к /sitemap приводит к обработке содержимого XML.

Однако, когда я получаю доступ к https://mysite/sitemap.xml, я получаюОшибка 404

Я почти уверен, что это связано со статической обработкой файлов, но я не уверен, как настроить ее так, чтобы /sitemap.xml работал.

1 Ответ

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

Вот простая демонстрация того, как сгенерировать xml-файл на сервер и показать xml-файл, используя URL-адрес, например https://mysite/sitemap.xml:

1.View:

<form asp-action="Create" enctype="multipart/form-data">
<div class="form-group">
    <input  type="file" name="file" id="file" class="form-control" />
</div>
<div class="form-group">
    <input type="submit" value="Create" class="btn btn-default" />
</div>

2.Контроллер:

public class UsersController : Controller
{
    private IHostingEnvironment _env;
    public UsersController(IHostingEnvironment env)
    {
        _env = env;
    }
    [HttpGet]
    public IActionResult Create()
    {
        return View();
    }
    [HttpPost]
    public async Task<IActionResult> Create(IFormFile file)
    {
        var fileName = System.IO.Path.GetFileName(file.FileName);
        var filePath = System.IO.Path.Combine(_env.WebRootPath, fileName);
        if (file.Length > 0)
        {
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
        }
        return View("Index");
    }
}

3. Обязательно добавьте app.UseStaticFiles();, как показано ниже, тогда вы можете получить доступ к https://mysite/sitemap.xml:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //...
    app.UseStaticFiles();      
    //...
}

4.Результат: enter image description here

...