gpt4 book ai didi

c# - 如何向服务器端 Blazor 项目添加 Controller (而非 View )支持

转载 作者:行者123 更新时间:2023-12-04 05:09:16 26 4
gpt4 key购买 nike

当我的服务器端 Blazor 应用程序正在运行时,我希望在 _Host.cshtml 中有一些 Javascript 代码能够将数据发布到 Controller 操作。当然,这完全超出了 Blazor 应用程序本身的范围,并且与 Blazor 应用程序本身无关。

我认为这将是向 services.AddControllers() 添加调用的问题和 endpoints.MapControllers()Startup.cs 中的适当位置.但是,在执行此操作并实现 Controller 操作后,我进行了以下观察:

  • 对操作的请求不会被路由并被视为“未找到”
  • 在 Razor 中,@Url.Action在 Controller 操作上返回一个空字符串

  • 如何以克服上述两个问题的方式向我的服务器端 Blazor 项目添加 Controller (而非 View )支持?

    最佳答案

    使用:端点.MapControllers()

    你可以在你的startup.cs中有这个:

        app.UseEndpoints(endpoints =>
    {
    endpoints.MapControllers();
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");
    });

    这个 Controller :
    [Route("api/[controller]")]
    [ApiController]
    public class DownloadController : Controller
    {
    private readonly IWebHostEnvironment environment;
    public DownloadController(IWebHostEnvironment environment)
    {
    this.environment = environment;
    }

    [HttpGet("[action]")]
    public IActionResult DownloadFile(string FileName)
    {
    string path = Path.Combine(
    environment.WebRootPath,
    "files",
    FileName);

    var stream = new FileStream(path, FileMode.Open);

    var result = new FileStreamResult(stream, "text/plain");
    result.FileDownloadName = FileName;
    return result;
    }
    }

    这在您的 .razor 页面中:
    @inject NavigationManager NavigationManager

    <button @onclick="DownloadFile">Download</button>

    @code {
    public void DownloadFile()
    {
    NavigationManager.NavigateTo($"/api/Download/DownloadFile?FileName=BlazorHelpWebsite.zip", true);
    }
    }

    见:
    https://github.com/ADefWebserver/Blazor-Blogs/tree/master/BlazorBlogs

    关于c# - 如何向服务器端 Blazor 项目添加 Controller (而非 View )支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022519/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com