我有一个.NET网站,我正在尝试使用web.config中的重写规则将所有请求重定向到"www.mysite.com".应该是一项简单的任务,但事实并非如此.我删除了文件系统中的所有内容,除了一个Default.aspx页面和一个带有以下重写规则的默认web.config:
<rule name="Redirect All" stopProcessing="true">
<match url="^(www\.)?mysite\.com(/.+)$" />
<action type="Redirect" url="www.mysite.com" appendQueryString="false" />
</rule>
Run Code Online (Sandbox Code Playgroud)
如果我请求www.mysite.com/garbage.aspx,服务器仍然试图查找garbage.aspx,或者我提供的任何其他URL,就好像重写规则不存在一样.很沮丧.想法?
所以基本上在最后学习如何将OpenAuth改为不在.NET 4.5中使用DefaultConnection之后,我已经转到了4.5.1,让那些学习变得毫无意义.AuthConfig.cs的职责现在位于Startup.Auth.cs中,OpenAuth的静态方法已被抽象出来,因此我无法再直接更改OpenAuth.ConnectionString的默认值.
在.NET 4.5.1中更改成员身份的连接字符串/数据库的最佳做法是什么?
从EF6开始,在使用Table Per Hierarchy继承配置实体映射时,可以执行类似的操作:
public class MyContext : DbContext
{
public DbSet<Device> Devices { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ABatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel");
modelBuilder.Entity<ADifferentBatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel");
}
}
Run Code Online (Sandbox Code Playgroud)
BatteryLevel不是Device基类的一部分 - 它是为实现接口契约而实现的派生类的属性.
是否可以将此作为默认行为,而不是必须为每个派生类添加新映射?
我有两个安装的Visual Studio 2013 RTM,它们都来自同一个ISO,都在Windows 8.1机器上运行.就我所知,两者都设置相同 - 相同的扩展和所有.一个允许我导入字体和颜色以及我选择的任何其他设置没有问题.另一个允许我导入我选择的任何设置,除了字体和颜色.我收到没有错误,没有任何变化,或者我收到一条消息,导致字体和颜色导入失败,因为"内部错误"我尝试了一切我能想到的:
什么都行不通,我不知道如何解决这个问题.
我一直在尝试突出显示项目中的"活动导航"选项卡.我的任务是更新旧网站而不更改为bootstrap(这是我的经验).我发现了一个拥有我需要的大部分内容的例子.现在,唯一具有"选定类"的选项卡是"主页"选项卡.当我单击另一个选项卡时,"主页"选项卡不再突出显示,但当前选项卡不再突出显示.当我检查元素时,Home选项卡仍然具有"selected class"属性.不知道该怎么办.
_布局
<ul id="navigation">
<li class="@Html.ActivePage("Home", "Index")">@Html.ActionLink("Home", "Index", "Home")</li>
<li class="@Html.ActivePage("About", "About")">@Html.ActionLink("About", "About", "Home")</li>
<li class="@Html.ActivePage("Products", "Products")">@Html.ActionLink("Products", "Products", "Home")</li>
<li class="@Html.ActivePage("Services", "Services")">@Html.ActionLink("Services", "Services", "Home")</li>
<li class="@Html.ActivePage("Contact", "Contact")">@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
HtmlHelper类
public static class HtmlHelperExtensions
{
public static string ActivePage(this HtmlHelper helper, string controller, string action)
{
string classValue = "";
string currentController = helper.ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString();
string currentAction = helper.ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString();
if (currentController == controller && currentAction == action)
{
classValue = "selected";
}
return classValue;
}
}
Run Code Online (Sandbox Code Playgroud)
CSS
ul#navigation li …Run Code Online (Sandbox Code Playgroud) 我正在从一个泵送给我的消息IObservable<byte[]>和反序列化为字符串,然后通过一个字符串泵出IObservable<string>.A 通过转换Socket填充IObservable<byte[]>消息FromEventPattern.来自Socket换行符分隔字符串的反序列化消息.由于从中接收的单个消息Socket不需要是单个分隔的字符串(它可以是任意数量的消息的任何部分,并且部分消息是可能的).想到解决这个问题的第一种方法是使用a Subject和一个闭包这样:
private IObservable<string> GetCompleteMessage(IObservable<byte[]> bytes)
{
const byte byteLineFeed = 10;
var subject = new Subject<string>();
byte[] leftovers = null;
bytes.Subscribe(current =>
{
var lastPositionOfLineFeed = -1;
for (var i = 0; i < current.Length; i++)
{
if (current[i] == byteLineFeed)
{
if (leftovers != null)
{
subject.OnNext(
Encoding.ASCII.GetString(
leftovers.Union(current.Slice(lastPositionOfLineFeed + 1,
i - lastPositionOfLineFeed))
.ToArray()));
leftovers = null;
}
else
{
subject.OnNext( …Run Code Online (Sandbox Code Playgroud) (此问题的底部添加了更新)
我有一个Web应用程序,它使用MVC5和WebAPI2以及用于DI的Autofac.该应用程序使用ASP.NET身份和oAuth承载令牌,虽然后者可能不重要.这一切都运行得很好,但是在这一点上我需要在整个OWIN管道以及我的应用程序的其余部分共享我注入的服务的相同实例,因此我正在尝试为MVC和Web设置Autofac的OWIN集成API.我似乎特写一切似乎除了工作AuthorizeAttibutes的ApiControllers.oAuth进程成功完成,我最终使用不记名令牌登录,但随后尝试使用WebAPI控制器/操作上的所述令牌进行授权失败.
具体来说,在IsAuthorized方法中System.Web.Http.AuthorizeAttribute,IPrincipal.Identity似乎没有正确实例化,因为它没有适当的声明,并且IsAuthenticated属性总是错误的.Autofac的开发人员表示该属性应该与OWIN集成一起使用,即使该代码使用了GlobalConfiguration 不适合OWIN集成的代码.我已经看到了多个要删除的建议config.SuppressDefaultHostAuthentication()(这里和这里),虽然这是不可取的,但我已经尝试了绝望但却无济于事 - 对于我的特定配置,这会导致IPrincipal返回null.我还尝试修改一个比我自己更简单的示例项目,以便AuthorizeAttribute在WebAPI控制器上使用,但也没有成功.在这一点上,我没有尝试的东西,非常感谢帮助.
这是我的Startup.cs:
[assembly: OwinStartup(typeof (Startup))]
namespace Project.Web
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
var config = new HttpConfiguration();
builder.RegisterHttpRequestMessage(config);
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
RegisterGeneralTypes(builder);
var container = builder.Build();
WebApiConfig.Register(config);
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
WebApiFilterConfig.RegisterGlobalFilters(config.Filters);
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
app.UseAutofacMvc(); …Run Code Online (Sandbox Code Playgroud) 我一直在阅读单元测试,TDD和SOLID原理,我需要一些澄清.我的理解是,如果遵循开放/封闭原则,单元测试可能在很大程度上变得不必要,因为代码无法修改 - 因此,如果代码被正确隔离和解耦,则无需重新测试.如果一旦代码通过相关的单元测试就不会改变单元测试所增加的前期成本的长期好处.代码将永远通过,因为它永远不会改变,对吧?需要测试继承的类,但是一旦它们通过相关的测试,它们也将被关闭以进行修改,并且不需要重新测试.关于OCP的维基百科文章强化了第一段中的这一思路(我意识到这并不能成为法律).
我发现在OCP和谐和TDD生活最好的解释是在这里,但它似乎是嫩说,OCP恭维TDD中,开发商从修改源代码的沮丧,因为修改,以测试新的时,现有的测试方法会变得复杂功能.
这就是它的全部吗?请注意,我不是在寻找一个论点,我是新手,我正在寻找那些对这个主题有更多经验的人的澄清.
当我向另一个问题提出答案时,我想到了这个问题.假设我有一个基类
public abstract class BaseClass {}
Run Code Online (Sandbox Code Playgroud)
有一些相当数量的派生类 - 让我们说超过六个.大多数派生类除了从基类继承之外没有任何相似性,但是其中两个具有相似性
public class OneOfMyDerivedClasses : BaseClass
{
public string SimilarProperty {get; set;}
//Other implementation details
}
public class AnotherOneOfMyDerivedClasses : BaseClass
{
public string SimilarProperty {get; set;}
//Other implementation details, dissimilar to those in OneOfMyDerivedClasses
}
Run Code Online (Sandbox Code Playgroud)
而已.这是任何子类除了继承之外的唯一相似之处BaseClass.在我的实际应用程序中,我通过IHaveSimilarProperty定义单个SimilarProperty属性的接口解决了这个问题,因为我关心的是一个对象实现了所使用的接口.但是由于我有重复,我应该为这两个派生类定义一个中间基类来继承,即
public abstract IntermediateBaseClass : BaseClass
{
public string SimilarProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我也可以结合两种方法,用界面装饰中间类......
所以我的问题在于是否足够重复以保证OOP最佳实践方面的中间基类.我是否应该积极地消除所有重复,或者我应该采取更务实的方法?如果是后者,哪些经验法则会促使我选择一种方法而不是另一种方法呢?
我有一个MVC + SignalR应用程序,它有大量的Reactive Extensions订阅,所有这些都是来自Socket实时数据的预测.其中一些订阅没有按预期工作,当它们引发异常时,它只是进入虚空,除非我正在调试.
我曾希望我可以使用Elmah自动记录这些未处理的异常,但似乎除非异常发生在处理请求/响应的同一个线程上,例如它导致黄色死亡屏幕,Elmah没有触及它.所以我的问题是双重的:
我可以让Elmah自动记录后台/工作进程的异常吗?
如果对#1的回答是"否",除了将我的订阅包装在非常高的级别的try/catch块中之外,我的下一个最佳选择是什么?
我在理解为什么 Visual Studio 调试器能够中断 WPF 应用程序中事件的未处理异常,而不是 Web 应用程序中的控制器操作时遇到了一些麻烦。如果我有这样的处理程序:
private async void SomeButton_Click(object sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
调试器很乐意在未处理的异常上中断。但是,如果我对控制器有类似的操作:
public async Task<SomeReturnValue> SomeAction()
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
调试器传递异常,最终 MVC 框架处理它并将其转换为 500 服务器错误以返回给客户端。
值得注意的是,当涉及到异步方法中的异常时,控制台应用程序似乎具有与 Web 应用程序相似的行为。我知道对于 ASP.NET,我可以禁用 Just My Code 并中断所有抛出的异常,而不仅仅是未处理的异常,但我没有牢牢掌握此处的架构差异,这些差异允许我们中断 WPF 事件的未处理异常而不是 ASP.NET 请求。上面说明的异常似乎是 WPF 观察到的异常,但 ASP.NET 未观察到。有人可以详细说明为什么吗?
任何人都知道如何更改VS11开发人员预览的支架和操作员颜色?它必须是选项>环境>字体和颜色下的新条目,但我找不到它.下面是.htm文件中脚本块的屏幕截图,用于说明受影响的符号:
请注意,颜色不适用于.cs文件.
我有一个 ASP.NET MVC/WebAPI 应用程序,其中域逻辑在某些情况下依赖于事件来解耦问题。在事件处理程序中避免使用异步方法变得越来越困难,但这是一个我想避免使用的 Web 应用程序,async void因为这些不是我们正在处理的顶级事件。我已经看到一些解决方案对于处理这个问题似乎过于复杂 - 我想保持这个简单的解决方案。我的解决方案是放弃EventHandler委托并使用Func返回 a 的 aTask代替,例如:
public event EventHandler<MyEventArgs> SomethingHappened;
Run Code Online (Sandbox Code Playgroud)
将被重构为:
public event Func<object, MyEventArgs, Task> SomethingHappened;
Run Code Online (Sandbox Code Playgroud)
所以在我的代码中我可以这样做:
if (SomethingHappened != null)
{
await SomethingHappened.Invoke(this, new MyEventArgs());
}
Run Code Online (Sandbox Code Playgroud)
我们是唯一使用这些项目的人,因此使用 的标准约定EventHandler并不是绝对必要的。虽然使用这种模式意味着知道处理程序是异步的,但我不确定这是否一定是件坏事,因为越来越多的库正在放弃它们的同步 API 方法或根本不包括它们。在某种程度上,我很惊讶这在 .NET 中不被支持作为一流的概念,因为 async/await 在许多 Web 应用程序常用的库中变得越来越普遍。
这似乎是一个优雅的解决方案。我已经在具有多个事件订阅者的真实应用程序中对此进行了测试,每个处理程序具有不同的延迟,并Invoke()等待所有事件。然而,这感觉就像一个陷阱。我错过了什么?
asp.net ×5
c# ×5
.net ×4
asp.net-mvc ×3
async-await ×2
autofac ×1
css ×1
debugging ×1
elmah ×1
iis ×1
inheritance ×1
interface ×1
oop ×1
owin ×1
razor ×1
sockets ×1
tdd ×1
unit-testing ×1
windows-8.1 ×1
wpf ×1