%windir%\Microsoft.NET\assembly\
是新的GAC.这是否意味着现在我们必须管理两个GAC,一个用于.NET 2.0-3.5应用程序,另一个用于.NET 4.0应用程序?
问题是,为什么?
我的事件日志充满了这条消息:
请求的表单身份验证失败.原因:提供的故障单已过期.
我认为当人们超时而非注销时会发生这种情况.
首先,这不是一个错误,它是 Type: Information
我不想要这些信息,如何阻止ASP.NET记录它?
我的应用程序不是web-farmed,而是使用静态机器密钥.
我为我的架构的数据访问层(DAL)构建了一个RESTful服务:
POST http://example.com/data/User
GET|PUT|DELETE http://example.com/data/User/{UserId}
Run Code Online (Sandbox Code Playgroud)
但是,对于业务逻辑层(BLL),使用第二个非RESTful服务:
POST http://example.com/accountapi/register
POST http://example.com/accountapi/login
Run Code Online (Sandbox Code Playgroud)
这个BLL服务不是直接调用DAL服务,而是直接与数据库对话.
你会如何改进这种架构?
我问的原因是因为IIS保护某些ASP.NET文件夹,如Bin,App_Data,App_Code等.即使URL没有映射到实际的文件系统文件夹,IIS也会拒绝路径段等于其中一个的URL提到的名字.
这意味着我不能有这样的路线:
{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
...其中id可以是任何字符串,例如
Catalog/Product/Bin
Run Code Online (Sandbox Code Playgroud)
因此,我没有禁用此安全措施,而是愿意在id之前使用后缀更改路由,如下所示:
{controller}/{action}_{id} // e.g. Catalog/Product_Bin
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin
Run Code Online (Sandbox Code Playgroud)
但是如果id包含新的分隔符,这些路由将不起作用,在这种情况下,例如
// These URL won't work (I get 404 response)
Catalog/Product_Bin_
Catalog/Product/_Bin_
Catalog/Product/__Bin
Run Code Online (Sandbox Code Playgroud)
为什么?我不知道,对我来说就像一个小虫.如何使这些路由工作,其中id可以是任何字符串?
我想了解C#的所有便利功能,以及它们如何映射到C#.
例如,自动属性:
public string Foo { get; set; }
Run Code Online (Sandbox Code Playgroud)
...映射到这样的东西:
string <Foo>k__BackingField;
[CompilerGenerated]
public string Foo {
get { return this.<Foo>k__BackingField; }
set { this.<Foo>k__BackingField = value; }
}
Run Code Online (Sandbox Code Playgroud)
Foreach循环:
foreach(char c in "Hello") {
Console.WriteLine(c);
}
Run Code Online (Sandbox Code Playgroud)
......映射到这样的东西(我想):
CharEnumerator en;
try {
en = "Hello".GetEnumerator();
while (en.MoveNext()) {
char c = en.Current;
Console.WriteLine(c);
}
} finally {
IDisposable disp = en as IDisposable;
if (disp != null)
disp.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
foreach
在处理非托管资源时,处理枚举器非常有用,例如循环文件中的行或数据库中的记录.
我认为对这些高级功能的良好理解可以帮助我们编写更好的代码.C#的其他便利功能有哪些?它们如何映射到C#?
对我来说,作为开发人员和用户,我发现空字符串("")无用且引起很多混乱,就像说string == char []
也许计算机需要空字符串,所以我想了解原因.
也可以看看:
我读了几篇文章说,通过在C#3.0中引入命名参数,参数名称现在是公共合同的一部分.这是真的,它到底意味着什么?我运行了一个简单的测试,在MyLib.dll中更改参数名称没有破坏使用原始名称的命名参数调用该方法的MyApp.exe,我认为因为C#编译器在编译时执行了重载决策,并且生成了IL对参数名称一无所知.这就是反汇编代码在Reflector上看到的内容:
private static void Main()
{
bool CS$0$0000 = true;
Class1.DoSomething(CS$0$0000);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
......这是原始的源代码:
static void Main() {
MyLib.Class1.DoSomething(a: true);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个嵌套区域的项目结构.例如,我有一个"Home"区域,在这下面我想要"新闻"区域来处理它自己的路线注册,并且当路线指向"新闻"区域中的控制器时将正确查找视图.通过将"新闻"区域名称更改为"主页/新闻"而不是简单地"新闻",可以找到正确的视图.在主要的Global.asax.cs中,我实例化所有区域("Home"和"News")并单独注册它们,因为RegisterAllAreas()函数只找到一层深的区域(即它只找到并注册"Home" "地区".
有没有其他人尝试类似的东西?这是一个主要的黑客攻击还是一个稳定的长期解决方案?您提供的任何建议都非常感谢.
命名布尔属性的框架设计指南是什么?如果没有,那你的建议是什么?
假设我有一个User
类,我需要一个属性来指定用户是否启用.这些是我能想到的选择:
此外,如果BL说,用户必须在默认情况下禁用和启用明确,我应该更喜欢"启用"的变化,考虑到默认值System.Boolean
是false
?
考虑一下:
[SomeAttr(typeof(Bar))]
class Foo {
class Bar {
}
}
Run Code Online (Sandbox Code Playgroud)
...还有这个:
class Foo : ISomething<Bar> {
class Bar {
}
}
Run Code Online (Sandbox Code Playgroud)
第一个例子编译,第二个例子没编译.要在继承泛型类型时使用嵌套类型引用,我必须使用父类型名称限定它:
class Foo : ISomething<Foo.Bar> {
class Bar {
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么?当从父类型(第一个例子)中的属性引用时,为什么不适用此限制?
.net ×7
c# ×5
asp.net ×2
.net-4.0 ×1
architecture ×1
asp.net-mvc ×1
gac ×1
iis ×1
java ×1
rest ×1
routing ×1
web-services ×1