我知道正则表达式对于验证IP地址是危险的,因为IP地址可以采用不同的形式.
我见过类似的C和C++问题,这些问题是用C#inet_ntop()中不存在的函数解决的.
我发现的.NET解决方案只处理标准的"ddd.ddd.ddd.ddd"表单.有什么建议?
我有一些使用的方法,Microsoft.Web.Administration.ServerManager我一直有一些问题.使用以下死简单代码进行说明.
using(var mgr = new ServerManager())
{
foreach(var site in mgr.Sites)
{
Console.WriteLine(site.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将该代码直接放在控制台应用程序中并运行它,它将获取并列出IIS快速网站.如果我从提升的命令提示符运行该应用程序,它将列出IIS7网站.有点不方便,但到目前为止还不错.
如果我将该代码放在由控制台应用程序引用和调用的类库中,它将始终列出IIS Express站点,即使控制台应用程序已升级.
谷歌让我尝试以下,没有运气.
//This returns IIS express
var mgr = new ServerManager();
//This returns IIS express
var mgr = ServerManager.OpenRemote(Environment.MachineName);
//This throws an exception
var mgr = new ServerManager(@"%windir%\system32\inetsrv\config\applicationhost.config");
Run Code Online (Sandbox Code Playgroud)
显然我误解了"升级"过程的运行方式.不应该在升级过程中执行的所有操作,甚至是来自另一个dll的代码,都应该以提升的权限运行吗?显然不是吗?
谢谢您的帮助!
我正在尝试将依赖项注入共享布局视图页面,以避免在使用布局的每个视图中执行此操作.
我已经按照wiki中的指导将注入依赖项注入到视图中,但该属性始终为null.
Autofac可以将属性注入到作为布局文件的自定义视图页面中吗?
这是我的设置.CustomViewPage
namespace MyApp
{
using System.Web.Mvc;
public abstract class CustomViewPage : WebViewPage
{
public IHelper Helper { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
〜/查看/共享/ _Layout.cshtml
@inherits MyApp.CustomViewPage
<!DOCTYPE html>
<html>
...
@if(this.Helper.HasFoo()){@Html.ActionLink("Bar")}
Run Code Online (Sandbox Code Playgroud)
全球注册......
builder.RegisterType<Helper>().AsImplementedInterfaces();
builder.RegisterModelBinderProvider();
builder.RegisterFilterProvider();
builder.RegisterModule(new AutofacWebTypesModule());
builder.RegisterSource(new ViewRegistrationSource());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Run Code Online (Sandbox Code Playgroud)
使用布局的"子"视图不是从CustomViewPage派生的.
我正在使用Entity Framework 4.3.1 Code-First,我需要在两个表之间拆分实体.这些表共享一个主键,它是1对1,但每个表上的列名称不相同.
我不控制数据布局,也不能请求任何更改.
例如,SQL表可以是

这将是我的实体......
public class MyEntity
{
public int Id {get; set;}
public string Name {get;set}
public string FromAnotherTable {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
这是我的映射.
public class MyEntityMapping : EntityTypeConfiguration<MyEntity>
{
public MyEntityMapping()
{
this.Property(e => e.Id).HasColumnName("ThePrimaryKeyId");
this.Property(e => e.Name).HasColumnName("MyDatabaseName");
this.Property(e => e.FromAnothertable).HasColumnName("AnotherTableColumn");
this.Map(m =>
{
m.Properties(e =>
{
e.Id,
e.Name
});
m.ToTable("MainTable");
});
this.Map(m =>
{
m.Properties(e =>
{
e.Id,
e.FromAnotherTable
});
m.ToTable("ExtendedTable");
});
}
Run Code Online (Sandbox Code Playgroud)
由于它们之间共享的密钥具有不同的列名,因此我不确定如何映射它.此映射将编译,但在运行时失败,因为EF发出SQL查找"ExtendedTable"表上的"ThePrimaryKeyId"列,该列不存在.
编辑 为了澄清,如果"ExtendedTable"上的PK遵循命名约定,我上面定义的内容可以(并且确实)起作用.但它没有,我无法改变架构.
基本上,我需要EF发出的是一个类似的SQL语句
SELECT
[e1].*, /*yes, wildcards are bad. doing it here …Run Code Online (Sandbox Code Playgroud) 正如其他地方所建议的那样 ,我在自定义错误配置中使用redirectMode = ResponseRewrite,因此我的自定义错误页面可以访问异常信息.这有点像魅力一段时间了.
在添加更多"帮助用户从错误中恢复"类型功能时,我们需要一段先前存储在Session中的信息.实现这一点时,我发现当redirectMode = ResponseRewrite时,Session的各种途径以null结尾,但是当redirectMode = ResponseRedirect(或未定义)时,它们都被填充.
谁知道为什么?我们必须在具有异常信息(ResponseRewrite)或具有Session(ResponseRedirect)之间进行选择,这似乎很奇怪.
关于Rich Custom Error处理的MSDN文章告诉我,当控制传递方法是Server.Transfer时,Session才可用,这就是我假设在引擎盖下使用的ResponseRewrite.显然事实并非如此.
asp.net exception-handling web-config custom-errors redirectmode
您建议在MVC中验证客户端的DateTime有哪些方法?
比方说,我有一个命名属性的模型DateOfBirth是一个DateTime,像这样.
public class UserModel
{
[DataType(DataType.Date)]
public DateTime DateOfBirth {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在View上,我有一个简单的
<%: Html.LabelFor(model=>model.DateOfBirth) %>
<%: Html.EditorFor(model=>model.DateOfBirth) %>
<%: Html.ValidationMessageFor(model=>model.DateOfBirth) %>
<input type="submit" value="Submit" />
Run Code Online (Sandbox Code Playgroud)
我可以使用Microsoft MVC验证或jQuery验证.如何让DateTime验证客户端?
我意识到所有DataTypeAttribute都提供了格式化提示,并没有真正做任何验证(它将该部分留给了ModelBinder).
基本上我想复制ModelBinder在尝试将发布的值放入模型的DateOfBirth属性时所做的事情.
你有什么建议?
javascript datetime client-side-validation asp.net-mvc-2-validation asp.net-mvc-2
我最近升级了一个使用实体框架从v4.3.1到5.0的WFC项目.
我只运行Coded迁移(没有自动迁移).
以前,我使用发布配置文件来部署此解决方案并应用迁移.由于将项目升级到EF5,迁移部分不再起作用,并且发布对话框不会将上下文检测为具有代码优先迁移.
具体来说,.pubxml文件从检测我的上下文<Object Type="DbCodeFirst">变为<Object type="DbDacFx">对我的上下文不正确.
作为一种解决方法,我手动将<entityFramework>数据库初始化程序配置添加到我的web.config转换中,但我想了解发布配置文件无法正常工作的原因.这是一个更好的解决方案.
deployment entity-framework ef-code-first ef-migrations entity-framework-5
我很好奇......你能指定一个空的或无价值的HTML属性吗?W3规范允许空属性,如下所示:
<input type="checkbox" disabled checked>
使用MVC,您可以声明如下输入:Html.CheckBoxFor(m=>m.Foo).您可以使用Html.CheckBoxFor(m=>m.Foo, new {@class="myCssClass"})语法添加Html属性,但您不能这样做Html.CheckBoxFor(m=>m.Foo, new { disabled, checked})
我知道规范还允许这些类型(例如new {disabled="disabled"})和空字符串值(例如new {disabled=""})的自我值属性.
我只是好奇是否有任何方法来指定空语法.
我们正在开发一个3层应用程序,我们已被允许使用最新和最好的(MVC2,IIS7.5,WCF,SQL2k8等).WCF服务将应用程序层公开给各种Web应用程序.由于我们控制服务和客户端,因此我们决定使用net.tcp绑定来提高其在HTTP上的性能优势.
我们希望使用ELMAH进行错误记录,包括Web应用程序和服务.这是我的问题.有很多关于将ELMAH与WCF一起使用的信息,但它都适用于HTTP绑定.有谁知道是否/如何使用ELMAH与WCF服务暴露非HTTP端点?
我的猜测是否定的,因为ELMAH需要HttpContext,它需要在web.config 中将AspNetCompatibilityEnabled标志设为true.来自MSDN:
IIS 7.0和WAS允许WCF服务通过HTTP以外的协议进行通信.但是,不允许在启用ASP.NET兼容模式的应用程序中运行的WCF服务公开非HTTP端点.当服务接收到其第一条消息时,这种配置会生成激活异常.
如果您不能将ELMAH与具有非HTTP端点的WCF服务一起使用,那么后续问题是:我们能否以不需要HttpContext的方式使用ELMAH?或者更一般地说(为了不提交细金属标尺错误),有没有办法将ELMAH与具有非HTTP端点的WCF服务一起使用?
注意:我知道我们可以下载Elmah源代码并将其更改为添加填充程序或删除HttpContext依赖项,但我正在尝试避免分叉代码.
我还是代表们的新手,我一直在玩Steven John Metsker的"C#中的设计模式"一书中描述的基于代理的数据访问层(非常好的阅读!).它定义了数据访问委托,如下所示:
public delegate object BorrowReader(IDataReader reader);
Run Code Online (Sandbox Code Playgroud)
使用它的结果是看起来像这样的代码:
var result = Foo.Bar(new BorrowReader(DoFooBarMagic));
var result = Foo.Bar(DoFooBarMagic);
Run Code Online (Sandbox Code Playgroud)
但是,由于委托的返回类型是"对象",因此需要强制转换以获取任何方法(本例中为"DoFooBarMagic")确实返回.因此,如果"DoFooBarMagic"返回List,则需要执行以下操作:
var result = Foo.Bar(DoFooBarMagic) as List<string>;
Run Code Online (Sandbox Code Playgroud)
我想要的是能够跳过强制转换,并从委托方法的返回类型推断出委托的返回类型.我的想法可能是有一种方法可以使用Type参数来推断返回类型.像这样的东西之一:
public delegate T BorrowReader<T>(IDataReader reader);
List<string> result = Foo.Bar(new BorrowReader(DoFooBarMagic));
//Look, Ma, no cast!
var result2 = Foo.Bar(DoFooBarMagic);
Run Code Online (Sandbox Code Playgroud)
返回的类型是从委托方法的返回类型推断出来的,但似乎不起作用.相反,你必须这样做:
public delegate T BorrowReader<T>(IDataReader reader);
var result = Foo.Bar(new BorrowReader<List<string>>(DoFooBarMagic));
Run Code Online (Sandbox Code Playgroud)
这几乎不比演员更好.
那么有没有办法从委托方法的返回类型推断委托的返回类型?
编辑添加: 如果需要,我可以更改Foo.Bar的签名.目前的签名基本上是这样的:
public static T Bar<T>(string sprocName,
DbParameter[] params,
BorrowReader<T> borrower);
Run Code Online (Sandbox Code Playgroud)
注意:该签名是当前状态的结果,该状态使用此委托定义:
public delegate T BorrowReader<T>(IDataReader reader);
Run Code Online (Sandbox Code Playgroud) 我一直在使用IIS express作为我的Web服务器,但是我遇到了一个需要应用程序池作为特定用户而不是NetworkService或其他帐户运行的场景.
使用下面的命令,我创建了一个应用程序池并配置了站点以使用它.现在,我无法通过Visual Studio启动IIS Express.当我尝试时,我得到"Visual Studio无法启动IIS Express Web服务器"消息.如果我使用命令行启动IIS Express,一切似乎都有效.如果我将应用程序池更改回使用服务帐户,或者甚至只是将站点更改为使用其他应用程序池,那么一切正常.有任何想法吗?
用于创建应用程序池的命令
appcmd add apppool /name:MyPool /managedRuntimeVersion:v4.0 /managedPipelineMode:Integrated
appcmd set config /section:applicationPools /[name='MyPool'].processModel.identityType:SpecificUser /[name='MyPool'].processModel.userName:'MyUser' /[name='MyPool'].processModel.password:MyPass
appcmd set app /app.name:MySiteName/ /applicationPool:MyPool
Run Code Online (Sandbox Code Playgroud)
用于手动启动iisexpress.exe的命令
iisexpress /config:c:\users\me\documents\iisexpress\config\applicationHost.config /trace:error
Run Code Online (Sandbox Code Playgroud)
我已经尝试重新安装IIS Express和Visual Studio 2010 SP1.没有不同.
为什么Principal.IsMemberOf(GroupPrincipal)(MSDN)Domain Computers在以下测试中为组返回假阴性?
[TestMethod]
public void DomainComputerTest()
{
var distinguishedName = "CN=MyMachine,DC=SomeDomain,DC=local";
using( var pc = new PrincipalContext( ContextType.Domain, "SomeDomain.local", "UserName", "Password" ) )
using( var computer = ComputerPrincipal.FindByIdentity( pc, IdentityType.DistinguishedName, distinguishedName ) )
{
Assert.IsNotNull( computer );
// Get the groups for the computer.
var groups = computer.GetGroups().Cast<GroupPrincipal>();
foreach( var group in groups )
{
// Immediately turn around and test that the computer is a member of the groups it returned.
Assert.IsTrue( computer.IsMemberOf( …Run Code Online (Sandbox Code Playgroud) 我们需要从 .NET (C#) 连接到 AS/400 并访问(读取和写入)数据。
问题是数据存储在大型机上的关系文件中,而不是 DB2 数据库中。
实现这一目标的最佳方法是什么?我很想使用 ADO.NET 实体框架类型解决方案,但我相信兼容的数据提供程序仅适用于 DB2。
c# ×5
.net ×3
asp.net-mvc ×2
iis-express ×2
asp.net ×1
autofac ×1
datetime ×1
delegates ×1
deployment ×1
elmah ×1
html ×1
httpcontext ×1
ibm-midrange ×1
iis-7 ×1
ip-address ×1
javascript ×1
net.tcp ×1
redirectmode ×1
uac ×1
was ×1
wcf ×1
web-config ×1