小编Bri*_*Kay的帖子

URL.Combine的URL?

Path.Combine很方便,但在.NET框架中是否有类似的URL功能

我正在寻找这样的语法:

Url.Combine("http://MyUrl.com/", "/Images/Image.jpg")
Run Code Online (Sandbox Code Playgroud)

将返回:

"http://MyUrl.com/Images/Image.jpg"

.net c# asp.net url path

1186
推荐指数
21
解决办法
29万
查看次数

您是否对数据库项使用源代码管理?

我觉得我的商店有一个漏洞,因为我们没有一个可靠的流程来版本化我们的数据库模式更改.我们做了很多备份,所以我们或多或少都被覆盖了,但以这种方式依赖你的最后一道防线是不好的做法.

令人惊讶的是,这似乎是一个共同点.我说过的很多商店都忽略了这个问题,因为他们的数据库并没有经常改变,而且他们基本上只是努力做到细致.

但是,我知道这个故事是怎么回事.事情排列错误只是一个时间问题而且缺少某些东西.

对此有什么最佳做法吗?有哪些策略对你有用?

database version-control

592
推荐指数
15
解决办法
12万
查看次数

在页面之间传递数据的最佳实践

问题

在我们在项目之间重用的堆栈中,我们在会话中放置了一些过多的数据,用于在页面之间传递数据.这在理论上是好的,因为它可以防止篡改,重放攻击等,但它会产生尽可能多的问题.

会话丢失本身是一个问题,尽管它主要通过实现会话状态服务器(或使用SQL Server)来处理.更重要的是,使后退按钮正常工作非常棘手,而且创建一种情况也是额外的工作,用户可以在三个选项卡中打开相同的屏幕来处理不同的记录.

这只是冰山一角.

大多数这些问题都有解决方法,但是当我磨砺掉时,所有这些摩擦让我觉得使用session在页面之间传递数据是错误的方向.

我真正想要做的是提出一个最佳实践,我的商店可以一直使用它来在页面之间传递数据,然后,对于新的应用程序,替换当前依赖于Session的堆栈的关键部分.

如果最终解决方案不会导致大量的样板管道代码,那也很好.

提出的解决方案

会议

如上所述,严重依赖Session 似乎是一个好主意,但它会打破后退按钮并导致其他一些问题.

可能有办法解决所有问题,但似乎需要做很多额外的工作.

使用会话非常好的一件事是篡改不是问题.与通过未加密的QueryString传递所有内容相比,您最终编写的守护代码更少.

跨页发布

事实上,我几乎没有考虑过这个选择.我有一个问题,它如何使页面紧密耦合 - 如果我开始做PreviousPage.FindControl("SomeTextBox"),这似乎是一个维护问题,如果我想从另一个页面可能没有到达此页面一个名为SomeTextBox的控件.

它似乎也受到其他方面的限制.也许我想通过链接访问该页面.

请求参数

我现在正倾向于这种策略,就像在过去那样.但我可能希望我的QueryString被加密以使其更难以篡改,我也想处理重放攻击的问题.

来自Rolla的4个人,有一篇关于此的文章.

但是,应该可以创建一个HttpModule来处理所有这些并从页面中删除所有加密香肠.果然,Mads Kristensen有一篇文章,他发布了一篇文章.但是,这些评论听起来似乎有极其常见的情况.

其他选择

当然,这不是对选项的详尽看法,而是我正在考虑的主要选项.此链接包含更完整的列表.我没有提到的那些如Cookies和Cache不适合在页面之间传递数据.

在结束...

那么,您如何处理页面之间传递数据的问题?你需要解决什么隐藏的陷阱,是否有任何预先存在的工具可以完美地解决它们?难道你觉得你已经得到了你和完全满意的解决方案?

提前致谢!

更新:以防万一我不够清楚,通过'在页面间传递数据'我正在谈论,例如,将CustomerID密钥从CustomerSearch.aspx页面传递给Customers.aspx,客户将在那里打开并且可以进行编辑.

asp.net encryption webforms query-string

64
推荐指数
4
解决办法
4万
查看次数

您对Windows Workflow Foundation有哪些经验?

我正在评估WF在网络上的业务应用程序中使用,我很想听听最近这个技术的第一手资料.

我最关心的是提高项目的可维护性,并在处理频繁变化的复杂流程时提高开发人员的工作效率.

我真的很喜欢WF的想法,但是它似乎相对不为人知,而且我发现许多较老的评论都提到它一旦进入它就会非常复杂.

如果它被过度设计到一个中小型项目无法使用(或不好的权衡),那就是我需要知道的事情.

当然,它已经从2006年底开始,所以也许它已经成熟了.如果是这样的话,这是另一条非常有用的信息!

提前致谢!

.net asp.net workflow workflow-foundation

34
推荐指数
6
解决办法
5395
查看次数

VB.NET中的默认属性?

在.NET的早期阶段,我相信有一个属性可以装饰一个类来指定一个默认属性.

根据我发现的一些文章,这似乎在某个时候已经从框架中被淘汰,因为它有点令人困惑,我可以看到这是怎么回事.

还有,还有另一种方法来获得它提供的功能吗?

它看起来像这样:

<DefaultProperty("Value")> _  
Public Class GenericStat
    ...
    Public Property Value() As Integer
        ...
    End Property
    ...
End Class
Run Code Online (Sandbox Code Playgroud)

这允许你做Response.Write(MyObject)而不是Response.Write(MyObject.Value)......这不是一个非常笨重的例子,但在一些复杂的面向对象的上下文中,它有点可怕.如果有更好的方法,请告诉我.

注意:我不是在寻找Default关键字,它只能用于带参数的属性.

.net vb.net oop

29
推荐指数
4
解决办法
3万
查看次数

什么编程语言最适合创建roguelike游戏?

有兴趣创建一个roguelike RPG(如Nethack,Rogue和ADOM),哪种编程语言最合适,为什么?

使用您选择的语言,请务必列出使其特别适合的语言库或方面.

roguelike

15
推荐指数
4
解决办法
2万
查看次数

ASP.NET表单身份验证在iPad上显示登录页面

我有一个网络应用程序,当从iPad使用时显示奇怪的行为.有时,它会一直显示登录页面,即使用户经过身份验证,我也会创建一个存储在客户端上的cookie.

该应用程序是一个MVC2应用程序,我通过ajax调用控制器方法来执行身份验证.如果ajax调用成功,则客户端执行window.location.assign()以将用户导航到安全页面.(我这样做是为了支持全屏iPad Web应用程序模式)

我使用以下代码来创建cookie:

string formsCookieStr = string.Empty;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1,                              // version
            username,                       // user name
            DateTime.Now,                   // issue time
            DateTime.Now.AddMinutes(30),    // expires
            false,                          // Persistence
            userRoleData                    // user data
    );
formsCookieStr = FormsAuthentication.Encrypt(ticket);
HttpCookie FormsCookie = new HttpCookie(FormsAuthentication.FormsCookieName, formsCookieStr);
HttpContext.Response.Cookies.Add(FormsCookie);
Run Code Online (Sandbox Code Playgroud)

验证的URL是/ Account/LogOn2.作为"安全"页面的网址是/ Admin

如果我查看IIS日志(下面),那么我可以看到第一次调用/ Account/LogOn2正在传递正确的用户名和密码.第二个日志条目显示了ajax调用随后产生的GET,并且您可以清楚地看到请求附带了一个新的ASPXAUTH cookie - 这是在第一次调用之后设置的cookie.为什么第二次调用导致302(重定向),当请求被正确认证时,如第二次调用中是否存在ASPXAUTH cookie所证明的那样?就好像服务器没有"看到"身份验证cookie并强制302重定向.第三个条目显示重定向,导致再次请求登录表单.

2011-06-07 16:33:37 W3SVC97442007 192.168.1.4 GET /Account/LogOn2 username=pete&password=wine&returnUrl=%2fProfileList 80 - 86.153.46.122 Mozilla/5.0+(iPad;+U;+CPU+OS+4_3_3+like+Mac+OS+X;+en-us)+AppleWebKit/533.17.9+(KHTML,+like+Gecko)+Mobile/8J3 .ASPXAUTH=214FCF8C485AD048B2A0833BCA77582097EBF8F88BC2B0A64D7CD4F2BD7B1D9CB0C4209DC82FFA93466A58462BCA7EAB0D35B8573CCC5AABDDD5F7ACD0D38FCCB7275A79606B990B8A189887F724BF4D30BF3F9474CCD872868FE6DB48A3825F8770116A1C142AAD99A195E5D46B7BD6DB8FCF709FDE79A6B4F70B99E9646B515946E82DD988231DCE8504E5B63134419A0A107CBB367ABC978BC71A5D7C2CEF;+ASP.NET_SessionId=5uu3m1db2iqgetgvmpjgnot2 200 0 0
2011-06-07 16:33:38 W3SVC97442007 192.168.1.4 GET /ProfileList - 80 - 86.153.46.122 Mozilla/5.0+(iPad;+U;+CPU+OS+4_3_3+like+Mac+OS+X;+en-us)+AppleWebKit/533.17.9+(KHTML,+like+Gecko)+Mobile/8J3 …
Run Code Online (Sandbox Code Playgroud)

asp.net forms-authentication ipad

14
推荐指数
1
解决办法
5260
查看次数

在多个项目中使用Asp.Net Core 2注入Serilog

我为Asp.Net Core 2.0配置了Serilog,它在我的启动Web项目中通过.Net Core依赖注入工作得很好(如果我通过Microsoft.Extensions.Logging使用它),但我无法从任何其他项目访问它.

这就是我所拥有的:

Program.cs中

using System;
using System.IO;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;

namespace ObApp.Web.Mvc
{
    public class Program
    {
        public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
            .Build();

        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(Configuration)
                .CreateLogger();

            try
            {
                Log.Warning("Starting BuildWebHost");

                BuildWebHost(args).Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public …
Run Code Online (Sandbox Code Playgroud)

c# asp.net logging serilog asp.net-core-mvc

13
推荐指数
3
解决办法
1万
查看次数

敏捷不适合哪些情况?

多年来,我一直在听力和阅读敏捷.我拥有一两本书,我喜欢这个主意.

我终于处于可以在我工作的地方滚动这样的东西的位置,但我非常担心这是否适合我们:

  • 这个没有最小尺寸吗?对于一个为期三到四周的项目,前期大设计必须更有效...对吗?
  • 我们的客户通常需要固定价格.他们需要知道他们正在处理什么,除非在我们遇到明显黑洞的特殊情况下,即使这样人们也更容易接受上限.那么,如果您正在使用能够容忍持续需求变更的流程,您如何提供报价?
  • 我知道敏捷可能会在更复杂的项目中提供更好的成功几率,但是它不会增加客户的成本吗?当然还有未考虑的成本 - 也许我们回到了这里的最小尺寸问题.
  • 您如何在世界范围内向客户解释这种反直觉的方法?非技术性的利益相关者可能没有经验来围绕瀑布以外的任何事物.
  • 即使是内部项目,也有预算.我错过了什么?
  • 好像最近对敏捷有一些强烈的反对意见.还有其他事情会很快开始起作用吗?

注意:我们是一家5开发商店,项目从一天或两天一直持续到几个月.我不相信有一种方法可以统治它们,但是找到足够灵活的东西以便我们能够适应所有项目会很棒.

非常感谢!

布莱恩麦凯

agile methodology software-design

12
推荐指数
3
解决办法
3614
查看次数

来自WindowsAzure.Storage的生产中出现403错误

我有一个使用WindowsAzure.Storage API v3的WebForms应用程序.它在开发和一个生产环境中工作正常,但我推出了一个新实例,任何调用Azure Blob存储的代码都会给我403错误.

我已经习惯了这一段时间了,并且它对Blob存储的任何调用失败了,所以不是显示我的代码,而是显示我的堆栈跟踪:

[WebException: The remote server returned an error: (403) Forbidden.]
   System.Net.HttpWebRequest.GetResponse() +8525404
   Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) +1541

[StorageException: The remote server returned an error: (403) Forbidden.]
   Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) +2996
   Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessType accessType, BlobRequestOptions requestOptions, OperationContext operationContext) +177
   ObsidianData.Azure.Storage.GetContainer(CloudBlobClient client, Containers targetContainer) in D:\Dev\nSource\Obsidian\Source\ObsidianData\Azure\Storage.vb:84
   ObsidianWeb.Leads.HandleListenLink(String fileName, HyperLink link) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:188
   ObsidianWeb.Leads.LoadEntity_ContactDetails(BoLead lead) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:147
   ObsidianWeb.Leads.LoadEntity(BoLead Lead) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:62
   EntityPages.EntityPage`1.LoadEntity() +91
   EntityPages.EntityPage`1.Page_LoadComplete(Object sender, EventArgs e) +151
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4018
Run Code Online (Sandbox Code Playgroud)

这是我试过的......

  • 在此环境中失败的AzureStorageConnectionString肯定适用于生产 …

vb.net asp.net azure azure-storage-blobs

12
推荐指数
1
解决办法
9587
查看次数