我今天遇到了一个奇怪的问题,对我来说毫无意义.以下是摘要:
在方法内部,我检查一个缓存的项目如下:
private async Task<RatesStatus> getRatesStatusAsync() {
//...
if (_currentHttpContext != null) {
//Here, I am checking for a Cached item
var cachedRatesStatusObj = HttpContext.Current.Cache[Constants.RATESSTATUS_CACHE_KEY_NAME];
if (cachedRatesStatusObj != null)
return (RatesStatus)cachedRatesStatusObj;
}
//...
cacheRatesStatusObject(ratesStatus);
//...
}
Run Code Online (Sandbox Code Playgroud)
这里,HttpContext.CurrentASP.NET应用程序中的预期值不是预期的.然后,在cacheRatesStatusObject方法内部,我检查是否HttpContext.Current为null,如下所示:
private void cacheRatesStatusObject(RatesStatus ratesStatus) {
//...
//Seeing if HttpContext.Current is null or not first.
//and it is null here...
if (HttpContext.Current == null)
return;
//...
}
Run Code Online (Sandbox Code Playgroud)
它在那里是空的.不知道这里发生了什么.有什么想法吗?
在我的构建脚本中,我有一个helper powershell函数,如下所示:
function set-connectionstring {
param($path, $name, $value)
$settings = [xml](get-content $path)
$setting = $settings.configuration.connectionStrings.add | where { $_.name -eq $name }
$setting.connectionString = "$value"
$setting.providerName = "System.Data.SqlClient"
$resolvedPath = resolve-path($path)
$settings.save($resolvedPath)
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,除了当我尝试设置值时,它奇怪地编码了&符号.这是问题:
在我的连接字符串里面,我"有价值.这应该是完全有效的.但是,我的上述代码将此转换&quot;为完全不合理的.你知道我能解决这个问题吗?
我想做的是有一个api请求,如/ api /计算器?1 = 7.00&2 = 9.99&3 = 5.50&4 = 45.76等我的控制器如何获取请求数据?查询字符串的键/代码的整数介于1和1000之间.在查询字符串中,它们可以是1000个代码中的一些代码,不一定是所有代码.价值部分是双倍的.
我认为可行的一种方法是,如果我创建一个StupidObject具有1000个属性的模型对象(ex )(现在应该使用名为p1,p2,... p1000的属性代码,因为int不是允许的属性名称),装饰有ModelBinder.然后对于控制器我可以有类似的东西,GetCalcResult(StupidObject obj){...}但这似乎不是一个优雅的解决方案:)
我尝试过控制器,GetCalcResult([FromURI]Dictionary<int, double> dict){...}但是dict总是为空.也没有[FromURI]我得到一个错误.也尝试List<KeyValuePair<int, double>>作为控制器参数具有相同的结果.
有人能指出我正确的方向还是给我一个有效的例子?
使用.NET Framework 4.5,ValidationAttribute该类现在具有一个Boolean名为的新属性RequiresValidationContext.
我一直在挖掘很长时间,我找不到这个属性的用途.这个的difault值是false,我最初认为如果将其设置为false,则调用以下方法:
public virtual bool IsValid(object value)
Run Code Online (Sandbox Code Playgroud)
如果设置为true,则调用下面的一个:
protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
Run Code Online (Sandbox Code Playgroud)
事实证明,无论你设置什么,总是调用IsValid返回的方法ValidationResult.
为了爱上帝,这个RequiresValidationContext属性是什么?
我通过以下步骤找到了此问题:
使用已安装的项目模板创建一个新的WebApi项目
转到Controllers/ValuesController.cs,有两个这样的Get方法:
public IEnumerable<string> Get() //这个提供了GetAll功能
public string Get(int id) //这个是GetOneById
我不喜欢这个设计,因为我认为两个api方法可以组合成一个:
public IEnumerable<string> Get(string ids) 当ids为null时,它返回所有记录,否则返回id的结果(看起来像id1,id2,id3 ......)
我也修改了路线:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{ids}",
defaults: new { ids = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
现在我觉得一切都准备好了.但是当我/values在浏览器中访问时(没有指定ids参数),我被告知"没有找到任何操作",直到我添加一个默认值ids:
public IEnumerable<string> Get(string ids = null)
Run Code Online (Sandbox Code Playgroud)
从现在开始,一切都按照我的预期运作.我仍然无法defaults在路线中移动参数.这意味着:代码将ids参数声明为可选两次.
查看位于System.Web.Http.Controllers.ActionSelectorCacheItem.FindActionUsingRouteAndQueryParameters方法的MVC4的源代码,我可以看到在找到正确的操作时忽略路由中定义的可选参数.就个人而言,我认为这真的很糟糕,即使是变通方法也很容易.或者我误解了路线和行动方法之间的关系?我认为路由是用于帮助请求查找其相应操作的规则,而"参数是可选的"恰好是规则的一部分.
我正在研究一些MVC 6和ASP.NET 5样本,我在找到有关使用承载令牌来保护API的任何有价值的文档时遇到了问题.我能够使这些样本与VS 2013,MVC 5一起工作,但是我无法将这些示例移植到VS 2015和MVC 6.有没有人知道在MVC 6中实现承载令牌的任何好样本以保护API?
在我当前的应用程序中,我FindAndModify对MongoDB服务器进行了以下MongoDB 调用
public static TEntity PeekForRemoveSync<TEntity>(this MongoCollection<TEntity> collection, string reason)
where TEntity : class, IEntity, IUpdatesTrackable, ISyncable, IDeletable, IApprovable
{
if (reason == null)
{
throw new ArgumentNullException(nameof(reason));
}
IMongoQuery query = Query.And(
Query<TEntity>.EQ(e => e.SyncInfo.IsDirty, true),
Query<TEntity>.NE(e => e.Deletion, null),
Query<TEntity>.NE(e => e.Approval, null),
Query<TEntity>.EQ(e => e.SyncInfo.HumanInvestigateFlag, null),
Query.Or(
Query<TEntity>.EQ(e => e.SyncInfo.IsUpdateInProgress, false),
Query<TEntity>.LT(e => e.SyncInfo.UpdateStartInfo.OccuredOn, DateTime.UtcNow.AddSeconds(-SyncConstants.PeekExpireTimeInSeconds))
),
Query<TEntity>.LTE(e => e.SyncInfo.PeekedCount, MaxPeekedCount)
);
return PeekForSync(collection, query, reason);
}
private static TEntity PeekForSync<TEntity>(this MongoCollection<TEntity> collection, IMongoQuery query, string …Run Code Online (Sandbox Code Playgroud) 让我们假设有一项服务如下;
http://exmaple.com/service1/GetSomething?apikey= {api-key-goes-here}
我的api密钥是:96a143c8-2f62-470c-b81f-dec5fc271873
所以我们将调用> http://exmaple.com/service1/GetSomething?apikey=96a143c8-2f62-470c-b81f-dec5fc271873链接,它会以JSON的形式返回响应.
当我使用JQuery(或任何其他客户端JavaScript库)使用它时,该密钥将如何安全?我在想,我认为没有办法.如果我打算通过客户端电话拨打该服务,那将是我们公开的.
对此有何想法?
谢谢.
例如,我将在我的一个存储过程中使用以下表变量;
DECLARE @MyTempTable TABLE
(
someField int,
someFieldMore nvarchar(50)
)
Run Code Online (Sandbox Code Playgroud)
这个变量线程安全吗?如果多个请求同时发生,您认为会发生冲突吗?
我有一个使用TinyMce jQuery插件的简单表单.当我加载页面时,TinyMce应该用他的编辑器替换我的textarea,但这不会发生.查看生成的html,我的textarea就在那里(可见性设置为隐藏)但是TinyMce没有创建任何iFrame对象.TinyMce对象存在,但activeEditor为null.就好像我没有初始化它,但我遵循的示例代码完全如下:
//这是我加载脚本的地方
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.tinymce.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/tiny_mce_jquery.js")"></script>
Run Code Online (Sandbox Code Playgroud)
//这是我的文字区域
<textarea id="tinymceId" name="content" class="tinymce" rows="1" cols="50" style="width:100%;" ></textarea>
Run Code Online (Sandbox Code Playgroud)
//这是我的脚本代码,我在其中初始化它
$(document).ready(function () {
$('#tinymceId').tinymce({
doctype: '<!DOCTYPE html>',
editor_selector: "tinymce",
convert_urls: false,
mode: "textareas",
});
});
Run Code Online (Sandbox Code Playgroud) asp.net ×2
asp.net-mvc ×2
c# ×2
jquery ×2
.net ×1
.net-4.5 ×1
api ×1
asp.net-core ×1
bearer-token ×1
build-script ×1
caching ×1
client-side ×1
cqrs ×1
httpcontext ×1
javascript ×1
mongodb ×1
powershell ×1
razor ×1
security ×1
sql ×1
sql-server ×1
system.web ×1
t-sql ×1
tinymce ×1
validation ×1
xml ×1