小编Mat*_*son的帖子

什么是"友好的URL"?

我最近阅读了很多关于"友好网址"的讨论(包括在本网站和其他地方),但我不确定究竟是什么让网址"友好",为什么我们真正关心(直到某一点) .插图:

以下是大多数当前Web开发人员称为"友好"的URL示例:

www.myblog.com/posts/123/this-is-the-name-of-my-blog-post

虽然这将被视为"不友好"(即坏,尼安德特人,无知,愚蠢):

www.myblog.com/posts.aspx?id=123

我的问题:

  • "友好"网址是否包含有关相关博客帖子的重复标识信息?换句话说,一旦你有帖子的id(123),为什么你需要标题?这不是违反"不要重复自己"的咒语吗?
  • 就用户而言,URL的形式有何不同?用户是否真的手动输入完整的URL(当然除了TLD之外)?用户是否曾查看页面的URL以确定页面的内容?为什么我们需要URL中博客文章的标题?这不是页面<title>标签和内容的用途吗?
  • 我经常听到SEO作为首选"友好"URL表单的原因.为什么搜索引擎蜘蛛关心URL?它们不只是抓取页面的自动化软件(以及指向其中包含的其他页面的链接)吗?如果搜索引擎像其他软件组件(例如数据库访问组件)一样编写,则URL将只是一个无意义的标识符(类似于关系数据库中的rowguid).如果我正在设计一个数据库模式,其中包含上面的"友好"URL作为表的主键,我会(非常正确地)被剔除.

我之前说过"达到一定程度",因为很明显,网址可能会失控.以下是来自Amazon.com的实际网址,我认为他们认为没有人会认为"友好":

http://www.amazon.com/Bissell-Kitchen-Housewares/b/ref=amb_link_5001972_17?ie=UTF8&node=694500&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=gp-center-5&pf_rd_r=1ZXNJFE0CCFFDH4B9HGH&pf_rd_t=101&pf_rd_p=405478901&pf_rd_i=510080

browser seo search friendly-url

58
推荐指数
5
解决办法
2万
查看次数

Visual Studio代码始终重新打开以前的文件或文件夹

VSCode似乎总是记得我的会话并重新打开我上次使用时打开的文件和/或项目.当从命令行运行它并且提供了文件或文件夹时,它显然表现正常,但是当从任务栏快捷方式打开时,我希望它默认为空的环境.

有没有办法改变这种行为?

visual-studio-code

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

Sammy.js路由没有从IE10中的Knockout绑定链接发射

我有一个单页面应用程序,它使用Knockout.js进行数据绑定,使用Sammy.js进行客户端(基于哈希的)URL的路由.

我在Internet Explorer中看到了一个奇怪的问题:有时链接在点击时会改变浏览器地址栏中的URL,但相应的Sammy路由将不会执行.

它不会每次都发生(但我可以一致地重现错误),它只发生在IE10中(Chrome每次都能很好地工作).它似乎也与Knockout有关,因为一组硬编码链接不会出现同样的问题.

为了说明,我已经删除了除了最低限度以外的所有内容以重新创建问题并创建了两个jsbin示例:

示例1(使用Knockout): http ://jsbin.com/aretis/2/

要查看问题,请打开上面的链接并单击"记录#1",然后单击"Baz",然后再单击"记录#1".记录1的URL将显示在地址栏中,但该记录的路径不会附加到列表中.

示例2(没有Knockout): http ://jsbin.com/amivoq/1/

在这个例子中,我有一个记录链接的静态列表,而不是数据绑定列表.单击任何链接(按任何顺序)将导致该路由被附加到列表中(应该如此).

提醒一下,必须在IE中运行这些才能重现问题.

有任何想法吗?

internet-explorer sammy.js internet-explorer-10 knockout.js single-page-application

9
推荐指数
1
解决办法
1272
查看次数

ASP.NET动态数据没有看到部分元数据"伙伴"类

我有一个ASP.NET 4动态数据网站,它运行在一组相当简单的数据库表中,通过另一个程序集中的实体框架模型公开.我不想在EF模型中构建所有表,因此在我的global.asax文件中,我已经初始化了默认模型,如下所示:

DefaultModel.RegisterContext( typeof( MyCompany.MyProject.DataModel.DataContext ), new ContextConfiguration() { ScaffoldAllTables = false } );

MSDN文档(以及global.asax文件中的注释)说我现在应该能够通过将[ScaffoldTable(true)]属性添加到其部分"伙伴"类来有选择地启用各个表的脚手架.我这样做了:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.DynamicData;

namespace MyCompany.MyProject.DataModel
{
    [MetadataType( typeof( InHouseClaimMetadata ) )]
    [ScaffoldTable( true )]
    public partial class InHouseClaim
    {
        [DisplayName( "In-House Claims" )]
        [TableName( "In-House Claims" )]
        public class InHouseClaimMetadata
        {
            [DisplayName( "Reporting Date" )]
            public object ReportingDate { get; set; }

            // etc etc...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在加载Default.aspx时,我收到以下错误消息:

没有可访问的表.确保在Global.asax中注册了至少一个数据模型,并启用了scaffolding或实现自定义页面.

我以前在类似的场景中使用它; 这次尝试的另一个不同之处在于我的EF模型是它自己的组件.如果我更改global.asax继续并脚手架所有表,它可以正常工作.但显然,我不希望如此.我小心翼翼地确保部分元数据类的名称空间与EF数据上下文的名称空间匹配.

所以我很难过......

c# asp.net entity-framework dynamic-data partial-classes

6
推荐指数
1
解决办法
3022
查看次数

在ASP.NET中设置活动选项卡Ajax TabContainer会导致整个容器消失

我有一个ASP.NET页面,它使用ASP.NET Ajax Control Toolkit TabContainer.在这种情况Page_Load下,我隐藏了一些基于给予页面的数据的选项卡.然后,我想根据(可选)查询字符串参数的值使其中一个选项卡处于活动状态.

所以我有:

protected void Page_Load ( object sender, EventArgs e )
{
    if ( !this.IsPostBack )
    {
        // Tabs with no data are hidden in here
        LoadDataIntoTabs();

        PreselectCorrectTab();
    }
}

private void PreselectCorrectTab ()
{
    if ( ctlTabContainer.Visible )
    {
        if ( !string.IsNullOrEmpty( Request.QueryString[ "tabIndex" ] ) )
        {
            int tabIndex = 0;

            if ( int.TryParse( Request.QueryString[ "tabIndex" ], out tabIndex ) )
            {
                if ( ( ctlTabContainer.Tabs.Count > tabIndex ) && …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-ajax ajaxcontroltoolkit tabcontainer

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

带有许多移动文件和文件夹的 Git rebase/merge 分支

我有一个包含两个主要分支的 Git 存储库:master 和 dev。它目前看起来像这样:

master  ( )----( )----(A)----(B)----(C)
                \
                 \
dev              ( )----( )----( )----( )----(~ 30 additional commits...)
Run Code Online (Sandbox Code Playgroud)

非常简单,除了master上的 commit A包含对文件和文件夹结构的重大更改(基本上,我使用此处显示的步骤将存储库在层次结构中向上移动了一层)。

我想继续在 dev 分支上工作,但是当我尝试将 dev 变基到 master 以将新的文件结构引入 dev 时,Git 出现了大量错误。我git reset回到了一个理智的状态,但在我(有些有限)的 Git 经验中,许多错误通常意味着我采取了错误的方法。

有没有更好的方法将重新组织的文件夹结构转移到 dev 分支?如果有帮助,主(BC)上的其他提交中的更改非常小,如果丢失它们会使事情变得更容易,我可以接受。

git

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

SignalR中的内存使用情况重新启动ASP.NET Web应用

我正在试用一个用ASP.NET MVC(C#)编写的在线游戏,使用SignalR进行游戏的实时性,并作为Azure Web应用程序托管。这是一个相当简单的桌上型游戏,但是我遇到了一个问题,即在高峰负载(晚上和周末)下,应用程序使用了过多的内存,并且工作进程自动重新启动。

这是我的SignalR连接类的粗略代码概述(已删除日志记录,空检查等内容):

namespace MyApp.Connections
{
    public class GameConnection : PersistentConnection
    {
        protected override Task OnDisconnected(IRequest request, string connectionId, bool stopCalled)
        {
            Game game = GameService.GetGameByConnectionId(connectionId);
            List<Task> connectionTasks = new List<Task>();
            Player player = game.GetPlayer(connectionId);

            game.RemovePlayer(player);

            foreach (Player playerToUpdate in game.Players)
            {
                GameActionResponse response = new GameActionResponse(game);
                response.Message = string.Format("Player '{0}' has left the game.", player.Name);
                connectionTasks.Add(Connection.Send(playerToUpdate.ConnectionId, response));
            }          

            return Task.WhenAll(connectionTasks);
        }

        protected override Task OnReceived(IRequest request, string connectionId, string data)
        {
            Game game = GameService.GetGameByConnectionId(connectionId);
            List<Task> connectionTasks = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc memory-management signalr azure-web-sites

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