IP 地址等。通常,当用户询问如何在 Server Blazor 应用程序中执行此操作时,他们要么被告知这是不可能的,要么有时会提供使用 JSInterop 的部分解决方案。但是可以在不诉诸 JSInterop 的情况下完成吗?这是答案...
我在几个场景中使用了 dotnet core 3.1 Web 应用程序中的HttpContext
from 。IHttpContextAccessor
它总是按照我的预期设置。
但是,当注入Razor 组件HttpContext
时,始终为 null 。IHttpContextAccessor
@inject IHttpContextAccessor HttpContextAccessor
<div>...</div>
@code {
protected override async Task OnInitializedAsync()
{
// here, HttpContextAccessor.HttpContext == null
}
public string GetSomeInfo()
{
// here, HttpContextAccessor.HttpContext == null
}
}
Run Code Online (Sandbox Code Playgroud)
我已经像这样IHttpContextAccessor
添加了Startup.cs/ConfigureServices()
services.AddHttpContextAccessor();
Run Code Online (Sandbox Code Playgroud)
为什么在HttpContext
null
这里?
我想打印一个渲染的模态,它打开了一些车辆信息,该按钮出现在模态上,点击应该将模态 HTML 转换为 PDF。
请告知是否有 C# 函数或我可以使用的函数,它将提取我想要转换为 PDF 的当前 HTML,或者引导我朝着正确的方向前进。我只做 C# 大约 2 个月,所以缺乏经验和专业知识。
编辑:还试图让代码在转储 PDF 时使用 CSS。
我添加了以下代码。
添加了参考文献等。
@using BidWheels.Configuration;
@using BidWheels.Shared.Controls;
@using BidWheels.Data;
@using BidWheels.CustomProviders;
@using BidWheels.Services;
@using System.Timers;
@using Syncfusion.Pdf;
@using Syncfusion.HtmlConverter;
@using System.Linq;
@using System.Web;
@using Microsoft.AspNetCore.Http;
@inject AppState AppState;
@inject UsersDAL UsersDAL;
@inject MainDAL MainDAL;
@inject NotificationService NotificationService;
@inject GeneralConfiguration GeneralConfiguration;
@inject GlobalVar GlobalVar;
@inject GlobalVarShared GlobalVarShared;
@inject Microsoft.JSInterop.IJSRuntime JS
@inject IHttpContextAccessor httpContextAccessor
Run Code Online (Sandbox Code Playgroud)
用于执行生成 PDF 的函数的按钮
</div>
<button class="btn btn-outline-success" @onclick="@CreatePDF">Generate PDF</button>
</div>
Run Code Online (Sandbox Code Playgroud)
这是按钮调用的函数。 …
不幸的是,有关在 Blazor Server 中访问 cookie 的教程和之前的 StackOverflow 答案似乎在新的 .Net 版本中变得无效。例如,我无法获得以下任一答案(并根据 .net 6 中没有的注释来判断):
How to use the HttpContext object in server-side Blazor to检索有关用户、用户代理的信息
如何在服务器端 Blazor 中访问 HttpContext?
我有一个包含以下代码的 Program.cs 文件:
..
builder.Services.AddHttpContextAccessor();
..
Run Code Online (Sandbox Code Playgroud)
它还有一个 app.MapPost 方法,使用以下方法设置 cookie: HttpContext.Response.Cookies.Append
我可以确认 cookie 有效,因为在邮递员中,我可以在查询此 app.MapPost 方法时成功检索它。
当尝试在 Login.Razor 页面中查询该方法时,它可以工作,但未设置 cookie。在此 Login.razor 中,httpContextAccessor.HttpContext.Request.Cookies["my_cookie"] 始终返回 null (即使响应本身是 200 OK,并且我可以很好地读取其内容,但没有可通过 HttpContext 检索的 cookie)。
这似乎是一个常见问题,从两个链接的答案来看,该问题已解决,但现在在 .net 6 中似乎再次出现问题。如何访问 Blazor Server .net 6 中的 HttpContext 以访问查询中发送的 cookie?