我们一直在开发asp.net mvc应用程序.只要用户登录,我们就必须维护一些用户特定的信息.对我来说有什么选择?缓存在站点的所有用户之间共享.Session似乎是选项,但我附加了webforms以显示Crystal Reports和webforms使用的Session对象和MVC是不同的:Mvc使用HttpSessionStateBase而webforms使用HttpSessionState.
我应该在会话中保留多少信息(我有一个大约30个整数/用户的数组)?我应该将它保留在会话中,还是应该使用会话和缓存的某种组合?
编辑:我创建了一个接受HttpSessionStateBase作为参数的SessionService,并从Mvc我调用它:
SessionService _service = new SessionService(HttpContext.Session);
Run Code Online (Sandbox Code Playgroud)
它返回HttpSessionStateBase但是Darin建议它是抽象类,所以它也可以使用SessionStateWrapper实现.在Web表单场景中,我正在使用类似的东西
HttpSessionStateWrapper Session = new HttpSessionStateWrapper(HttpContext.Current.Session);
SessionService _SessionRepository = new SessionService(Session);
Run Code Online (Sandbox Code Playgroud) 我有一个contentEditable div,其中包含以下文字:
<div contentEditable='true'> This document is classified</div>
Run Code Online (Sandbox Code Playgroud)
现在,例如,如果用户点击word文档中的"m",我想显示包含少量文本选项的上下文菜单.该上下文菜单将包含在div元素中.我想用用户从上下文菜单中选择的选项(文本)替换单词"document".在我看来,我必须找到单击的绝对位置以显示上下文菜单,然后我必须在插入符号位置之前和之后找到空格元素,然后用从上下文菜单中选择的选项替换选择.知道如何使用JavaScript和jQuery做到这一点?
编辑:
我的问题的一部分是关于上下文菜单和其他更重要的是我如何检测用户在contentEditable div或另一方面在文本区域中单击的单词.我的目标如下图所示
实际上我想制作一个类似的音译应用程序.从罗马到乌尔都语的脚本转换过程已经完成但是我在网络上的用户界面开发中遇到了很多问题.谷歌音译应用程序可以在这里找到.我希望有人可以帮助我在用户的鼠标下获取单词并显示包含少量选项的上下文菜单.
我在我的asp.net mvc应用程序中使用L2S进行数据库操作我在我的存储库中执行了简单查询
(from pt in db.oaProjectTasks
where pt.ProjectID == ProjectID
join t in db.oaTasks on pt.TaskID equals t.TaskID
where t.ParentTaskID == null
let daypassed = GetDaysPassed(t.StartDate,t.Duration)
select new ChartTask{TaskNumber = t.TaskNumber,StartDate = t.StartDate,
DurationRemaining = t.Duration - daypassed,TaskDescription = t.Task, DaysPassed = daypassed,Duration = t.Duration }).ToList();
Run Code Online (Sandbox Code Playgroud)
下面是GetDayPassed方法的定义
private int GetDaysPassed(DateTime StartDate, int Duration)
{
int retVal;
if ((DateTime.Now - StartDate).Days > 0)
{
if ((DateTime.Now - StartDate.AddDays(Duration)).Days > 0)
{
retVal = Duration;
}
else
{
retVal = (DateTime.Now - …Run Code Online (Sandbox Code Playgroud) 我为HtmlHelper类编写了一个简单的扩展方法
public static string GetExpressionNames<TModel>(this HtmlHelper<TModel> helper,params Expression<Func<TModel,object>>[] args) where TModel:class
{
string returnStr = string.Empty;
int i = 0;
foreach (var x in args)
{
returnStr += (++i).ToString() + ExpressionHelper.GetExpressionText(x) + "<br/>";
}
return returnStr;
}
Run Code Online (Sandbox Code Playgroud)
目前,它只是接受在Model属性(返回对象)上定义的LambdaExpressions数组,并将它们的表达式文本添加到一个字符串中,然后由该函数返回.问题是,对于字符串类型属性,它工作正常,但对于int属性,它将空字符串作为表达式文本返回.原因是对于返回int值的表达式,表达式的主体看起来像下面的图像:
但对于字符串,它就像
我认为convert方法是返回积分值的表达式,导致空字符串作为Expression文本返回.我怎样才能解决这个问题?我只需要原始表达文本,即Id for Convert(x.id)和Name for x.Name; 如何在后端处理它并不重要.
我刚刚使用apicontroller创建了我的第一个休息服务.我使用它与Web表单而不是mvc-4.我如何在Web服务中实现安全性.请记住,除浏览器之外的客户端可能会使用服务如何设置安全性.当我们从浏览器对使用表单身份验证的asp.net应用程序进行身份验证时,应用程序会返回一个身份验证cookie,在每个后续请求中由浏览器转发,并且应用程序通过解密cookie知道用户已登录.
我正在观看关于web api安全性的多元视觉教程.他们主张我们应该只有一个方法可以在传递json数据时登录用户.登录后,该方法将auth cookie返回给客户端(浏览器和其他服务客户端),客户端应在每个后续请求上发送此cookie以授权自己.这个身份验证方案对于Web服务是否正常还是有其他推荐的方法?问题更多的是关于实施什么而不是如何实施?
编辑:我从@ AliOstad得到的这个问题的答案是我应该为我的服务创建一个单独的登录方法,理想情况下应该在https上工作,这个方法应该返回一个加密的auth标头,包括用户的电子邮件和发布时间.一旦客户端获得了令牌,他就可以通过在auth头中传递此令牌(到andriod app等)来继续使用该服务.如果数据服务(与应该在https上工作的登录服务相对),我认为没有问题.因为令牌将在x分钟后过期,因此在http上运行.在服务器端它完全可以,但我的客户如何知道他的令牌已经过期,他需要在从数据服务获取数据之前获得另一个令牌?我的第二个问题是,如果我以这种方式实现它,我将如何处理由asp.net应用程序(asp.net应用程序和web api在同一应用程序上运行)对数据服务的ajax调用.有(在javascript中),我要么需要身份验证令牌或用户名和密码来获取身份验证令牌,它们似乎都不可行?
任何想法我应该如何处理这些情况?
我刚刚在visual studio 2013中创建了一个简单的mvc-5应用程序,只有几页.在开发环境中,它运行正常但是当我将它上传到GoDaddy服务器时它抛出以下异常
[MethodAccessException:尝试通过安全透明方法'Vertance.MvcApplication.Application_Start()'访问安全关键方法'System.Web.Mvc.AreaRegistration.RegisterAllAreas()'失败.
当我检查本地计算机上的版本信息时,它显示如下
.NET框架版本:4.0.30319
Asp.Net版本:4.0.30319.34209
在服务器上,版本信息如下
.Net Framework版本:4.0.30319(与本地机器相同)
Asp.Net版本:4.0.30319.34280(与本地机器不同)
可能是什么问题呢?为什么会这样?
编辑1:我还在AssemblyInfo.cs文件中放入了以下属性
[assembly: SecurityCritical()]
Run Code Online (Sandbox Code Playgroud)
但它也没有用.
我需要用于浮点数的正则表达式模式,%最后选择符号
12.32
12.32%
0.32
.32
.32%
Run Code Online (Sandbox Code Playgroud)
浮点数左右两侧的任意数字长度.我需要这个来验证asp.net mvc app中的输入
更新:
忘记以下组合
12%
35
45%
Run Code Online (Sandbox Code Playgroud) 前段时间我使用asp.net Web-api beta构建了API.我在某处读到,当在IIS中托管时,web-api从其运行的Web应用程序继承Identity.我的api也在网站上运行.使用beta二进制文件,当我登录该站点然后移动到http://localhost:4343/webui/api/values它时,将返回登录用户的正确值.这是Get值控制器的方法.
public IQueryable<string> Get()
{
var pr = Request.GetUserPrincipal();
var username = Request.GetUserPrincipal().Identity.Name; //Null reference exception after installing vs 2012 here. Identity is null even though I am logged in
var values = GetUserValues(username);
return values.AsQueryable();
}
Run Code Online (Sandbox Code Playgroud)
它曾经与web-api的beta版本一起正常工作但是在vs2012的最终版本中它抛出了null引用异常.我已将网站转换为使用.net 4.5.知道这里发生了什么吗?
我希望我的输入字段之一正好有 10 位数字。我ng-pattern以下列方式使用
<input type="text" ng-pattern="/[1-9]{1}[0-9]{9}$/" ng-model="user.Identity" name="identity">
Run Code Online (Sandbox Code Playgroud)
问题是这个表达式允许用户输入超过 10 位数字的数字字符串,而我想只允许 10 位数字。我的正则表达式或我的理解有问题ng-pattern吗?
asp.net-mvc ×4
c# ×2
javascript ×2
regex ×2
.net-4.5 ×1
angularjs ×1
asp.net ×1
c#-4.0 ×1
caching ×1
jquery ×1
lambda ×1
linq ×1
linq-to-sql ×1
ng-pattern ×1
rest ×1
security ×1
session ×1
webforms ×1