好吧,这不是什么大不了的事,但它让我烦恼,我不能放手.
所以我使用MVC 5.1与.NET 4.5.1和OWIN身份验证.因此,当您创建新的MVC 5项目时,以下内容会自动添加到Web.config中以删除表单身份验证http模块,因为在使用OWIN中间件时不再需要它:
<system.webServer>
<modules>
<remove name="FormsAuthenticationModule" />
</modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
现在,因为我们正在删除模块,这意味着它之前已添加,所以这里是注册此http模块的条目C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config:
<httpModules>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</httpModules>
Run Code Online (Sandbox Code Playgroud)
这里是C:\Windows\System32\inetsrv\config\applicationHost.configIIS 8.5 的条目,告诉我的应用程序使用该模块:
<system.webServer>
<modules>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
</modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
因此,在应用程序级别自动添加到我的Web配置的名称属性为"FormsAuthenticationModule",而两个服务器级别/ asp.net级别配置文件中的条目使用名称属性"FormsAuthentication".那么这里发生了什么?在我看来,由于name属性不匹配,因此不会删除该模块.我只是认为这是一个错字,但在网上搜索后,每个人似乎都在应用程序web.config中使用"FormsAuthenticationModule".这是最新版本的asp.net/iis的最新变化还是我错过了什么?
我是OWIN身份验证的新手,我必须误解一切是如何工作的,但我无法在任何地方找到这个.
我想要的是能够使用中央域进行身份验证.如果有人apps.domain.com在未经过身份验证时尝试访问,则会将其重定向到accounts.domain.com/login以便将所有身份验证分成其自己的域和应用程序.使用MVC 4表单身份验证非常容易,您可以在其中指定完整的URL,但似乎不适用于OWIN.
在Startup.Auth.cs:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/account/login")
}
Run Code Online (Sandbox Code Playgroud)
使用该CookieDomain选项设置cookie时,可以轻松指定域.但是,当您指定要重定向到的登录路径时,它必须相对于当前应用程序,那么如何在MVC 4表单身份验证中完成哪些操作非常简单?
在没有深入了解OWIN身份验证的全部内容的情况下,经过几个小时的搜索后,我找不到任何解决此问题的方法.
我一直在重构我目前正在进行的项目的代码库,因此除了程序集的范围之外没有用的类/接口应该被声明为内部(而不是公共).但是我遇到了以下代码的问题:
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
为什么内部接口的成员必须公开实施?如果在内部类上实现接口,那么实现的成员不应该是内部的吗?这不是一个大问题,因为接口成员无论如何都不会公开访问,因为类是内部的.这似乎与直觉相反.
主要问题是上面的场景,因为我不能有一个IFirstInterface的公共getter,因为它据称是一个内部接口,即我从编译器得到以下错误:
可访问性不一致:属性类型"IFirstInterface"比属性"Implementer.First"更难访问
有没有办法解决?
注意:我意识到这个重构练习可能没什么价值,但我认为这将是一个很好的方式让我更深入地了解内部修饰符的含义.
这似乎是在绑定到输入字段时使用knockout清理/验证/格式化数据的常用方法,它创建了一个使用计算的observable的可重用自定义绑定.它基本上扩展了默认值绑定,以包括一个拦截器,它将在写入/读取之前格式化/清理/验证输入.
ko.bindingHandlers.amountValue = {
init: function (element, valueAccessor, allBindingsAccessor) {
var underlyingObservable = valueAccessor();
var interceptor = ko.computed({
read: function () {
// this function does get called, but it's return value is not used as the value of the textbox.
// the raw value from the underlyingObservable is still used, no dollar sign added. It seems like
// this read function is completely useless, and isn't used at all
return "$" + underlyingObservable();
},
write: function (newValue) {
var …Run Code Online (Sandbox Code Playgroud) 当我的表单发布到我的控制器操作,并且表单绑定到我的模型时,可空双精度和小数的空白表单值默认为0,但可为空的整数的空白表单值默认为null.这是正确的吗?
我的模型有几个可以为空的字段的可空类型.它有可空的整数,双精度和小数.然后我有一个常规表单,其中包含每个属性的文本框,并且它们都默认为空(空字符串).当此表单以所有空表单值发回到我的控制器操作,并且它绑定到我的模型时,空的双精度数和小数数显示为0,空的整数为空.
在我看来,当传入一个空的表单值时,所有可空类型都应默认为null,但即使不是这种情况,看起来非常不一致,双精度和小数的处理方式与整数不同.
我试图将聚簇索引添加到SQL Server 2008中的现有表中,并且它必须是自动脚本,因为此表存在于跨多个服务器的多个数据库中。
为了添加聚簇索引,我需要删除表上的PK约束,然后将其重新添加为未聚簇的。问题是PK约束的名称是自动生成的,并且在末尾附加了GUID,因此就像“ PK_ [Table] _D9F9203400”。
所有数据库的名称都不相同,我不确定如何编写自动脚本以将PK约束删除到我不知道约束名称的表上。任何帮助表示赞赏!
更新:
下面的答案是我用的。完整脚本:
Declare @Val varchar(100)
Declare @Cmd varchar(1000)
Set @Val = (
select name
from sysobjects
where xtype = 'PK'
and parent_obj = (object_id('[Schema].[Table]'))
)
Set @Cmd = 'ALTER TABLE [Table] DROP CONSTRAINT ' + @Val
Exec (@Cmd)
GO
ALTER TABLE [Table] ADD CONSTRAINT PK_Table
PRIMARY KEY NONCLUSTERED (TableId)
GO
CREATE UNIQUE CLUSTERED INDEX IX_Table_Column
ON Table (Column)
GO
Run Code Online (Sandbox Code Playgroud) 我在Windows上使用最新版本的Mercurial和TortoiseHg.假设我的存储库中有5个分支,它们都有一个名为的文件MyFile.txt.我想在分支中更改此文件名的大小写,因此新名称是myfile.txt.稍后,当我将此分支合并到我的其他4个分支时,需要将该同一文件重命名MyFile.txt为myfile.txt没有大小写折叠的冲突.所以最终所有分支都将与新文件名同步myfile.txt.
在Windows上实现这一目标的最佳方法是什么?
编辑:例如,我应该首先重命名MyFile.txt为不同的东西bla.txt,然后重命名bla.txt为myfile.txt,如果是这种情况,我应该在所有5个分支上做同样的事情,以避免合并时出现大小写折叠冲突吗?
我在 .NET Core 2.0 上使用 Entity Framework Core 2.0。为了重现这个问题,我制作了一个简单的控制台应用程序。
// Program.cs
static void Main(string[] args)
{
using (var dbContext = new MyDbContext())
{
using (var transaction = dbContext.Database.BeginTransaction())
{
try
{
var blogs = dbContext.Blogs
.ToList(); // throws error because of schema mismatch in my Blog class
// other stuff that may or may not make db changes
dbContext.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback(); // throws second error that hides the initial error: "There is already an open …Run Code Online (Sandbox Code Playgroud) 我的视图模型中有一堆金额是可观察的,我希望它们存储为数字,因为它们用于多次计算.但是,当我将它们绑定到我视图中的文本框时,我希望它们显示为特殊格式的字符串(1234.5678 =>"1,234.57").在这种情况下实现双向绑定的最佳方法是什么,因为我不能只使用与我的observable的值绑定?
用户需要能够在文本框中输入"1,234.56"或"1234.56",这将在observable中存储数字值1234.56,如果我通过javascript更改数值(3450),则需要将文本框值更新为新值,但格式化为字符串("3,450").
我很感激帮助!
javascript knockout-mapping-plugin knockout-2.0 knockout.js knockout-validation
我正在使用knockout和映射插件来自动创建我的视图模型.我在视图模型中有一堆金额,我绑定到文本框.当用户更改文本框中的金额时,我想要的是确保他们输入的是一个数字,并且它大于0,如果不是,我想用0替换他们输入的内容.这似乎是它应该很简单......使用自定义绑定或订阅功能.
我正在阅读的关于敲门验证的所有内容都涉及扩展器和读/写计算的observable,或者添加另一个插件(例如jquery验证).对于这种情况,它们似乎都有点过分,并且必须为要验证的每个observable显式声明扩展器/计算的observable.我有很多使用映射插件自动创建的金额,所以这似乎不合理.
任何帮助将不胜感激!
knockout-mapping-plugin knockout-2.0 knockout.js knockout-validation
asp.net ×3
knockout-2.0 ×3
knockout.js ×3
c# ×2
javascript ×2
owin ×2
.net-core ×1
asp.net-mvc ×1
iis-8 ×1
interface ×1
internal ×1
mercurial ×1
sql ×1
sql-server ×1
t-sql ×1
tortoisehg ×1
windows ×1