我使用 ReactJS 开发我的应用程序,之前还可以,但突然出现了这个错误:
获取 https://localhost:44368/static/js/0.chunk.js net::ERR_HTTP2_PROTOCOL_ERROR 200
我不知道这里发生了什么,以前还好。我怎样才能解决这个问题?
IIS服务器重启后,我的登录会话(使用简单会员资格)和cookie(验证令牌)似乎无效.这对我来说是一个问题,如果一个用户在事务中间然后服务器重新启动,用户必须重新填写表单并再次执行它,也可能是一些代码问题,当事务在中间中断时处理.
服务器重启后如何使它们仍然有效?
这是我的web.config:
<membership />
...
<sessionState mode="InProc" cookieless="false" timeout="2880" />
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
...
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
<remove fileExtension=".woff" />
<remove fileExtension=".woff2" />
<mimeMap fileExtension=".woff" mimeType="application/font-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
</staticContent>
Run Code Online (Sandbox Code Playgroud)
我试图使用SQLServer来存储会话状态.然后出现了新的问题,我不能使用,ViewBag因为它不是Serializable.
还有另一种方法可以达到这个目的吗?
我正在构建一个MVC应用程序.它表现得如此奇怪.如果我在我的开发服务器(visual studio调试)上运行它,即使我通过更改web.config多次重启我的应用程序,它运行正常,但是当我托管它时,它表现得如此奇怪.
对于第一次加载,一切正常.我可以加载所有页面,通过ajax等发布正常,但是在我重新启动服务器HttpRuntime.UnloadAppDomain();后,每次我通过ajax发布时,我总是得到
内部服务器错误500
我不知道应用程序发生了什么,但我怀疑客户端(用户)缓存/ cookie出了什么问题.
我将[ValidateJsonAntiForgeryToken]属性用于接收帖子的控制器函数.
[HttpPost]
[ValidateJsonAntiForgeryToken]
public JsonResult LoadPage(int id, string returnUrl, PageFormViewModel pageForm, string jsonFormModel)
Run Code Online (Sandbox Code Playgroud)
这是处理json验证令牌的代码
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ValidateJsonAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
var httpContext = filterContext.HttpContext;
var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
AntiForgery.Validate(cookie != null ? cookie.Value : null, httpContext.Request.Headers["__RequestVerificationToken"]);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我发布它的示例:
var getURL = $('#GetURL').val();
var returnUrl = …Run Code Online (Sandbox Code Playgroud) 因此,我想对我的数据进行常规分类。我有这段代码从数据库中获取数据,该数据库将仅提取包含的数据value。
using System.Linq.Dynamic;
public static IQueryable<object> SortList(string searchString, Type modelType,
IQueryable<object> model)
{
....
string toStringPredicate = type == typeof(string) ? propertyName +
".Contains(@0)" : propertyName + ".ToString().Contains(@0)";
model = model.Where(propertyName + " != NULL AND " + toStringPredicate, value);
}
Run Code Online (Sandbox Code Playgroud)
该模型是这样的:
public class ManageSubscriberItems
{
public int? UserId { get; set; }
public string Email { get; set; }
public Guid SubscriberId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时:
models = (IQueryable<ManageSubscriberItems>)EcommerceCMS.Helpers.FilterHelper
.SortList(searchString, typeof(ManageSubscriberItems), models);
if(models.Any())
Run Code Online (Sandbox Code Playgroud)
它引发此错误:
“ …
因此,我尝试从 NodeJS 服务器读取 Chat GPT API 响应。响应从我的后端通过管道传输到客户端(在 Angular 中)。
const chatStream = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
body: JSON.stringify({
model: process.env.CHAT_GPT_MODEL,
messages,
n: 1,
max_tokens: parseInt(process.env.CHAT_GPT_TOKEN_LIMIT ?? "2000"),
stream: true,
}),
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + process.env.CHAT_GPT_API_KEY,
},
});
res.setHeader("Content-Type", "application/octet-stream");
res.setHeader(
"Content-Disposition",
'attachment; filename="generated_text.txt"'
);
// Pipe the GPT API response directly to the client's response object
chatStream.body.pipe(res);
Run Code Online (Sandbox Code Playgroud)
这就是我在前端(Angular)处理响应的方式。这是我的httpPostStream功能:
const res = this.http
.post(this.getUrl(url), body, {
headers: {
'Content-Type': 'application/json',
// eslint-disable-next-line quote-props
Authorization: …Run Code Online (Sandbox Code Playgroud) 我正在使用Razor Engine从数据库动态编译我的剃刀视图.现在我使用Razor Engine 3.7.3.我看到很少有关于如何阅读html帮助并编译它的帖子,但它是旧版本的razor引擎.
我已经读过了ITemplateServiceConfiguration,但我真的不明白它是如何工作的.
我的问题是,如何在html内容中使用@Html(Html帮助程序),@ Url(Url Helper)和@section(如@Section脚本,@Section精选)成功运行compile()razorengine(v3.7.3)我的数据库?
我到目前为止所做的事情.我试图实现我从另一篇文章中获得的代码.该代码适用于较旧版本的剃刀引擎.他建议我们创建自己的帮助类:
public class RazorHtmlHelper
{
public IEncodedString Partial(string viewName)
{
ITemplate template = RazorEngine.Razor.Resolve(viewName);
ExecuteContext ec = new ExecuteContext();
RawString result = new RawString(template.Run(ec));
return result;
}
}
public class RazorUrlHelper
{
public string Encode(string url)
{
return System.Uri.EscapeUriString(url);
}
}
Run Code Online (Sandbox Code Playgroud)
然后他建议创建我们自己的模板:
public class RazorTemplateBase<T> : TemplateBase<T>
{
private RazorUrlHelper _urlHelper = new RazorUrlHelper();
private RazorHtmlHelper _htmlHelper = new RazorHtmlHelper();
public RazorUrlHelper Url
{
get
{ …Run Code Online (Sandbox Code Playgroud) 我一直在努力使用这些元素大约2个月.
当我的MVC4应用程序被回收时出现了第一个问题.当前登录的用户突然无法访问标记为[授权]的任何控制器操作.此外,任何成功访问需要数据库连接的控制器操作都会产生此错误:
无法打开用户默认数据库.登录失败.用户'IIS APPPOOL\DefaultAppPool'登录失败.
这很奇怪,因为如果我清除我的身份验证cookie,它可以正常工作.所以ASPXAUTH和.ASPNET_SessionId cookie 存在问题.
后来我发现这些错误是由服务器重启或回收后会话失效引起的.我的会话设置是InProc模式.这意味着每次重新启动或回收服务器时会话都会丢失.
然后我将会话配置更改为自定义会话SQLStore,其中描述了
https://msdn.microsoft.com/en-us/library/ms178588.aspx
和
https://msdn.microsoft.com/en-us/library/ms178589.aspx
目的是将会话数据存储在SQLServer中,但问题似乎不会消失.服务器重新启动或回收后,当前登录的用户仍然无法访问控制器操作.
我的想法是SimpleMembership没有将登录会话存储在数据库中.这是我登录的方式:
WebSecurity.Login(userName, model.Password, persistCookie: true)
Run Code Online (Sandbox Code Playgroud)
如果我是正确的,系统将尝试将身份验证cookie与登录会话数据进行匹配,并确定身份验证是否仍然有效.这就是我的用户遇到问题的原因,因为会话和cookie之间的匹配会产生一些奇怪的东西.
我在过去的两个月里做了很多研究,我发现了很多与我相似的问题,但我找不到合适的解决方案.
我正在使用的临时解决方案是在服务器被回收或重新启动时注销用户.这不是一个好的解决方案,因为如果用户处于重要事务或提交的中间,则数据可能会丢失,并且用户将再次重定向到登录页面.
我有我的机器密钥集:
<machineKey validationKey="685DD0E54A38F97FACF4CA27F54D3DA491AB40FE6941110A5A2BA2BC7DDE7411965D45A1E571B7B9283A0D0B382D35A0840B46EDBCE8E05DCE74DE5A37D7A5B3"
decryptionKey="15653D093ED55032EA6EDDBFD63E4AAA479E79038C0F800561DD2CC4597FBC9E"
validation="SHA1" decryption="AES" />
Run Code Online (Sandbox Code Playgroud)
我尝试调试我的自定义SQL会话存储,我发现数据库中没有存储认证会话.我只能"__ControllerTempData"从我的SQL会话中找到检索,没有别的.
如果我错了,请纠正我,网站重用身份验证cookie的方式并通过比较身份验证cookie和身份验证会话验证它,我是对的吗?
显然,SimpleMembership Login()不会将身份验证会话存储到SQL状态服务器中.
那么哪个会话密钥用于比较?
我的自动迁移在尝试更新数据库时不断给我这个错误。
不支持影响迁移历史系统表位置的自动迁移(例如默认架构更改)。对于影响迁移历史系统表位置的操作,请使用基于代码的迁移。
这是我的代码:
[DbConfigurationType(typeof(AlvinCMSExtension.Migration.AlvinCMSCustomHistoryConfiguration))]
public class AccountDBContext : DbContext
{
public AccountDBContext()
: base("DefaultConnection")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Alvin_CMS.Models.AccountDBContext, Alvin_CMS.Migrations.AccountDBContext.Configuration>());
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Membership> Memberships { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<UsersInRole> UsersInRoles { get; set; }
public DbSet<OAuthMembership> OAuthMemberships { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());
string query = "select schema_name()";
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand com = new …Run Code Online (Sandbox Code Playgroud) 我刚换了笔记本电脑。我正在移动我在 MVC 4 中完成的旧项目,并在 Visual Studio 2012 中完成。我的新笔记本电脑中当前的 Visual Studio 是 2017 版本。
当我想调试我的 MVC 应用程序时出现问题。运行调试后出现此错误:
HTTP 错误 403.14 - Forbidden Web 服务器配置为不列出此目录的内容。
最可能的原因:未为请求的 URL 配置默认文档,并且服务器上未启用目录浏览。
我从未将我的应用程序设置为在目录浏览器中列出。我的应用程序是一个 MVC 应用程序,它将运行 global.asax 并重定向到我的主页。
我怎样才能解决这个问题?
我有这个代码:
let otherParticipants = await chatRoomParticipantRepo
.createQueryBuilder("chatRoomParticipant")
.leftJoinAndSelect("chatRoomParticipant.user", "user")
.select("user.connectionId")
.where("chatRoomParticipant.chatRoomId = :chatRoomId AND chatRoomParticipant.userId != :userId")
.setParameters({ chatRoomId: chatRoomId, userId: userId })
.getRawMany();
Run Code Online (Sandbox Code Playgroud)
这给了我这个结果:
[{user_connectionId: 's7p7bUbzt0wudKcxAAAD'}]
Run Code Online (Sandbox Code Playgroud)
如果我这样做,getMany()它会给我空数组:
[]
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取ID连接user到 的chatRoomParticipant,但我无法使用以下代码来做到这一点:
let otherParticipants = await chatRoomParticipantRepo
.createQueryBuilder("chatRoomParticipant")
.leftJoinAndSelect("chatRoomParticipant.user", "user")
.select("user.connectionId")
.where("chatRoomParticipant.chatRoomId = :chatRoomId AND chatRoomParticipant.userId != :userId")
.setParameters({ chatRoomId: chatRoomId, userId: userId })
.getMany(); <-- This gives nothing
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?我以为getRawMany()只是为了SUM, COUNT, etc。在这种情况下,我试图获取getMany()也应该使用的 ID?
c# ×7
asp.net-mvc ×5
asp.net ×3
cookies ×3
javascript ×2
session ×2
.net-core ×1
ajax ×1
angular ×1
asp.net-core ×1
dynamic ×1
dynamic-linq ×1
linq ×1
node.js ×1
razorengine ×1
reactjs ×1
sql-server ×1
typeorm ×1