我正在发布一个 ASP.NET Core MVC 3.0 网站,输出文件夹包含许多语言的库引用Microsoft.CodeAnalysis,有人知道为什么吗?
当然FxCopAnalyzers,项目中安装了Nuget 包,但它没有在项目的早期版本中发布,所以我不明白为什么现在它应该只在开发时有用,而不是在生产环境中使用。
通过在 Web 服务器 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP ) 上设置内容安全策略标头,任何内联脚本都会被现代浏览器阻止。建议将所有 javascript 放在 .js 文件中,并配置策略以授权托管这些 .js 文件的域。
很好,但我的问题是我们如何将数据从服务器端应用程序传递到客户端脚本?
例如,如果我想调用一个以服务器端值作为输入的 js 函数,我仍然必须在被阻止的页面主体中调用该函数,如下面的代码(MVC.Net Razor View)。
<body>
...
<input type="button" value="Test" onclick="DoSomething('@ViewData["SomeValue"]');" />
...
</body>
Run Code Online (Sandbox Code Playgroud)
我找到了一些在脚本 src 属性查询字符串中传递数据的方法(http://feather.elektrum.org/book/src.html),但我不确定这是最好的解决方案。我特别担心 src 查询字符串中变量的缓存问题。有更好的方法吗?
我正在尝试测试一些缓存配置,我希望我的页面在请求再次到达服务器之前保留在缓存中1分钟.
使用这个简单的test.asp页面,它有一个自己的链接:
<% Option Explicit %>
<%
Response.Expires = 1
Response.CacheControl = "private, max-age=60"
%>
<html>
<head><title>test</title></head>
<body>
<% =Now() %>
<br />
<a href="test.asp">test</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这在我的开发计算机http://localhost/test.asp上完美运行,(点击链接不会在1分钟内刷新打印的日期时间).
但是,当我将页面放在生产服务器上时,它没有达到预期的效果.点击链接仅几秒钟后,我得到一个新的日期时间,意味着请求到达了Web服务器.
我使用Chrome开发工具查看这些响应标头:
HTTP/1.1 200 OK
Cache-Control: private, max-age=60
Content-Type: text/html
Expires: Tue, 12 May 2015 19:16:52 GMT
Last-Modified: Tue, 12 May 2015 19:10:00 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 12 May 2015 19:15:55 GMT
Content-Length: 205
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助解释为什么它不能在prod服务器上工作?
更新 我尝试使用Chrome,Firefox和IE,还有2个页面test.asp和test2.asp,两个都有一个指向另一个页面的链接,并且在8-12秒之后得到完全相同的问题,页面刷新而不是等待刷新前60秒.
好的,我读了很多关于存储库模式的东西,包括Fowler的书.我知道它是什么以及它做了什么,但是我不太确定它是如何被工厂和/或域对象调用的.
我理解的是,存储库应该像域对象的内存中集合一样,而工厂是负责实例创建的类: new myDomainObject()
考虑到这一点,很明显存储库需要引用工厂来从数据源查询创建新对象.(存储库 - >工厂)
域对象还需要对工厂的引用才能创建新对象.
我的困境是当域对象想要检索现有对象时,它应该调用存储库还是工厂?如果直接调用库(域 - >库 - >厂),比它需要有两到工厂和仓库,这似乎太给我的参考,但它是坏?
另一方面,如果它像工厂一样调用工厂factory.CreateObjectWithId(id),那么工厂必须只将调用重定向到存储库repository.GetById(id),最后这个调用同一工厂的另一个方法来创建对象(如果它不在内存中)factory.CreateObject(dataset),因此导致循环引用:域对象 - >工厂< - >存储库,这对我来说似乎不是一件好事.
那么在您看来哪些选项更好?或者还有其他选择吗?
我的一些单元测试之间存在冲突.我有一个静态事件的类,当我一次运行一个测试时我没有问题,但是当我批量运行所有测试时,触发事件的测试将因为注册的监听器(具有在之前的测试中注册了该事件).
显然,我不希望在测试类触发事件时执行事件处理程序,那么最佳解决方案是什么?
我知道如果事件不是静态的话我不会有问题,但如果有另一个解决方案,我宁愿不必重新设计它.
在运行测试之前分离所有事件侦听器可能是一个解决方案,但我认为不可能从类外部执行此操作(这似乎是正常原因,我们不希望客户端能够分离所有其他侦听器),以及从内部做这意味着我必须在类中添加一个方法,仅用于单元测试,这是不好的做法.
有没有办法以隔离模式运行测试,以防止其他先前的测试影响它?就像它是在完全分离的进程中运行一样,这样我就不会得到对静态事件的相同引用?(但我仍然需要能够通过简单的点击批量执行所有测试)
感谢您的帮助和想法!
有关信息,我使用的是Visual Studio 2012单元测试框架.
我发现很多关于Equals重写和==运算符重载之间差异的讨论,但似乎有一些关于我们应该或不重写默认的相等行为的问题,这让我怀疑这样做的好方法.
以下是我的理解,请告诉我你是否有些不对劲:
1)==不推荐非不可变类型的重载(为什么??),并且对于不可变类型(也就是DDD的值对象)非常有用,如果值相同但不是引用,则== comparaison返回true.
2)等于(和GetHashCode)也应在不变类型重写来执行类型内的相关字段的每个值的良好comparaison.
3)实体平等如何?
覆盖Equals并仅比较id属性是一个好主意吗?或者我应该让比较引用的默认对象行为?
对于这两个选项,我认为如果我遵循规则,我应该在线程上下文中始终只有一个特定实体的实例,结果应该是相同的,但是这些选项之一有一些缺点或优点我应该知道吗?
c# ×2
asp-classic ×1
asp.net-core ×1
conflict ×1
equality ×1
factory ×1
fxcop ×1
http-caching ×1
javascript ×1
repository ×1
unit-testing ×1