我正在使用MVC 4 Web API为应用程序创建服务层.我正在尝试创建一个全局过滤器,它将对API的所有传入请求起作用.现在我明白这必须配置不同于标准的MVC全局动作过滤器.但我遇到的问题是我在网上找到的任何一个例子.
我遇到的问题是使用Web API注册过滤器.
我的Global.asax设置如下......
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
MVCConfig.RegisterRoutes(RouteTable.Routes);
MVCConfig.RegisterGlobalFilters(GlobalFilters.Filters);
WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters);
}
}
Run Code Online (Sandbox Code Playgroud)
我的标准Mvc路由和过滤器正常工作.和我的WebApi路由一样.这是我的webApi过滤器注册...
public static void RegisterGlobalFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new PerformanceTestFilter());
}
Run Code Online (Sandbox Code Playgroud)
这是PerformanceTestFilter ......
public class PerformanceTestFilter : ActionFilterAttribute
{
private readonly Stopwatch _stopWatch = new Stopwatch();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_stopWatch.Reset();
_stopWatch.Start();
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
_stopWatch.Stop();
var executionTime = _stopWatch.ElapsedMilliseconds;
// Do something with the executionTime
}
}
Run Code Online (Sandbox Code Playgroud)
当使用标准Mvc GlobalFilterCollection注册时,此过滤器工作正常,但是当我尝试使用System.Web.Http.Filters.HttpFilterCollection注册它时,我收到一条错误消息,指出它不能分配给参数类型System.Web.Http. Filters.IFilter. …
在我的应用程序中,我有以下代码......
public Boolean SaveUserInformation(UserInfoDTO UserInformation)
{
return dataManager.SaveUserInfo(new UserInfo()
{
UserInfoID = UserInformation.UserInfoID.HasValue ? UserInformation.UserInfoID.Value : 0,
UserID = UserInformation.UserID,
ProxyUsername = UserInformation.ProxyUsername,
Email = UserInformation.Email,
Status = UserInformation.Status
});
}
Run Code Online (Sandbox Code Playgroud)
此代码调用使用实体框架的dataManager对象上的方法...
public Boolean SaveUserInfo(UserInfo userInfo)
{
try
{
//Validate data prior to database update
if (userInfo.UserID == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with UserID property set to NULL."); }
if (userInfo.ProxyUsername == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with ProxyUsername property set …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我建立一个动态菜单ASP.NET MVC4 web application.当我构建菜单时,我想确保用户不应该访问的菜单项不会显示在菜单中.
我正在使用表单身份验证和[Authorize]每个页面需要给定角色的属性.
给定两个字符串(Controller and Action)和一个登录用户,如何确定用户是否可以访问该控制器操作?
我的所有菜单数据都存储在数据库中.我渲染菜单的计划是构造菜单数据的JSON对象并将其嵌入到View中.然后客户端我将使用Handlebars.js菜单JSON object并将其插入模板.
我正在尝试检查用户的给定Controller/Action的权限,因为我正在渲染菜单数据.我最初的想法是使用反射并查找控制器操作方法并检查是否存在Authorize属性,并检查当前登录用户是否具有访问该页面的必要角色.如果不是,则不会呈现菜单项.
我总是不愿意使用reflection,通常往往会有一种更简单的做事方式.
我在gulpfile.js中有以下设置:
gulp.task('browserify', function() {
browserify(config.paths.browserifyEntry)
.transform(reactify)
.bundle()
.pipe(source('master.js'))
.pipe(gulp.dest(config.paths.dist))
//.pipe(connect.reload());
});
gulp.task('watch', function () {
gulp.watch(config.paths.components, ['browserify']);
gulp.watch(config.paths.sassSource, ['sass']);
});
Run Code Online (Sandbox Code Playgroud)
这一切都很有效,直到我编写的代码导致浏览器出错.这种情况经常发生,因为我在一个文件中编辑代码,这取决于我还没有在另一个文件中进行的更改,浏览器出错.
问题是当浏览器出错时,它结束了监视任务.我希望当浏览器出错时,它根本无法完成它的任务,但是手表会继续,以便当我进行其他更改以使browserify成功运行时,它会这样做.进行更改然后重新加载浏览器并发现当代码处于错误状态时,由于浏览器化错误导致监视进程结束,这是有问题的.
有没有办法吞下这个错误,以免它停止监视过程?或者是否有另一个npm软件包可以监视文件并且不会因browserify错误而被绊倒?
我开始对OpenGL感兴趣了,我试图找出在学习过程中使用哪种语言的最佳方向.我已经非常熟悉C#,从我读过的内容中,我可以利用Tao API与C#代码中的OpenGL接口.但是,在我看来,在我看来,那些真正专业的OpenGL开发人员也是C++程序员.
我很好奇在使用OpenGL中的3D图形时,C++可能比C#有什么优势.任何输入都会很棒,因为我完全是新手.
我使用aspnet_regsql.exe将ASP.NET Membership表安装到远程数据库中.它似乎已经成功创建了我在过去使用此技术时创建的数据库中的所有表.aspnet_regsql也说该过程成功完成.
我可以使用sql server management studio连接数据库并执行查询.我的web.config文件设置包含相关设置,如下所示.
<connectionStrings>
<add name="ApplicationServices" connectionString="Data Source=**********;Initial Catalog=********;Integrated Security=false;User ID=*************;Password=******" providerName="System.Data.SqlClient" />
</connectionStrings>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
我知道与数据库的连接有效.连接字符串是正确的.然而,当我进入网站管理工具开始配置安全性时,我得到一个错误说:
您选择的数据存储存在问题.这可能是由无效的服务器名称或凭据或权限不足引起的.它也可能是由未启用角色管理器功能引起的.单击下面的按钮可重定向到可以选择新数据存储的页面.
以下消息可能有助于诊断问题:无法加载类型'PVN.Web.MvcApplication'.
所以,是的,这是我正在尝试构建的MVC3应用程序.Web应用程序项目的名称称为PNV.Web,但我不知道'PVN.Web.MvcApplication'是什么.
任何有关这方面的帮助将不胜感激.
谢谢
我正在使用实体框架(数据库优先),我正在尝试将旧数据库中的一堆数据导入到我们的新数据库中.在某些情况下,对象ID在新数据库中保持与旧数据库相同是很重要的.通常,当您创建新对象并调用context.SaveChanges()时,它将自动为ID列分配标识值.
目前,我将在代码中设置新的对象ID,但是一旦我调用了context.SaveChanges(),它就会被Entity Framework分配的新对象覆盖.
我需要能够手动设置新对象中的ID,并在调用context.SaveChanges()后保留它.
我有一个名为AccessData的类的实例,它继承自DbContext.所以它是一个实体框架代码第一个上下文类,看起来像这样......
public class AccessData : DbContext
{
public DbSet<apps_Apps> apps_AppsList;
public DbSet<apps_AppsOld> apps_AppsOldList;
...
//Several other DbSet<> properties
}
Run Code Online (Sandbox Code Playgroud)
使用Reflections,我已经在AccessData对象上找到了这些DbSet属性之一,就像这样......
var listField = accessData.GetType().GetField(typeName + "List");
Run Code Online (Sandbox Code Playgroud)
我现在需要能够向此DbSet属性添加对象.
鉴于我只有一个表示DbSet字段的FieldInfo对象,如何在AccessData对象上调用此特定Field的Add方法并传入一个对象?
或者换句话说,如何调用以下内容?
accessData.<FieldInfoType>.Add(obj);
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的.
我有一个属性定义为......
public List<Obj> Objs { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是在get方法中加入一些逻辑,所以它看起来像......
public List<Obj> Objs
{
get
{
if (Objs == null)
{
Objs = new List<Obj>();
}
if (Objs.Count < 1)
{
Objs.Add(new Obj());
}
return Objs;
}
set { Objs = value; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做时,我收到一个错误,告诉我函数在所有路径上都是递归的.
有没有办法在不创建私有支持字段的情况下执行此操作?
在我的项目中,我尝试将ESLint实施为从npm脚本启动的构建过程的一部分。
我有eslint,所有插件都需要作为npm软件包安装,并且我的.eslintrc文件已全部安装。当我然后运行命令时...
eslint src
Run Code Online (Sandbox Code Playgroud)
...在Mac上,一切正常。因此,我可以接受该命令并将其粘贴到npm脚本中,并且效果很好。
但是,在Windows上遇到问题。当我安装eslint npm软件包时,无法从命令行使用eslint。我看到它已经安装在node_modules目录中,并且将可执行文件放入了node_modules / .bin目录中,但是当我运行命令时...
eslint src
Run Code Online (Sandbox Code Playgroud)
...我收到一条错误消息,提示未找到eslint命令。
如果我在全球范围内安装eslint和所有插件,我可以使它正常工作,但这不是理想的选择,因为其他任何克隆我的代码的人也都需要这样做。就像在Windows上一样,命令行没有映射到node_modules / .bin的路径。
我试图用这个小技巧解决这个问题:
PATH=$(npm bin):$PATH eslint src
Run Code Online (Sandbox Code Playgroud)
当我直接从命令行运行此命令时,似乎可以找到eslint命令,并且一切正常。但是,当我将同一命令放入npm脚本时,该脚本运行时没有输出,也没有错误。
关于如何进行此工作的任何方向都将非常棒。谢谢。
c# ×7
.net ×3
asp.net ×3
javascript ×2
asp.net-mvc ×1
browserify ×1
c++ ×1
eslint ×1
gulp ×1
gulp-watch ×1
node.js ×1
npm ×1
opengl ×1
reflection ×1