小编Dan*_*eny的帖子

由于不区分大小写的URL和默认值,我如何避免ASP.NET MVC中的重复内容?

编辑:现在我需要真正解决这个问题,我做了一些调查,并想出了一些减少重复内容的东西.我在我的博客上发布了详细的代码示例:使用ASP.NET MVC减少重复内容

第一篇文章 - 如果我标记错误或标记错误,请轻松一下:P

在Microsoft的新ASP.NET MVC框架中,似乎有两件事可能导致您的内容在多个URL上提供(Google会惩罚这些内容并导致您的PageRank被分割):

  • 不区分大小写的URL
  • 默认网址

您可以设置默认控制器/操作以满足对域根目录的请求.假设我们选择HomeController/Index.我们最终提供以下提供相同内容的网址:

  • mydomain.com/
  • mydomain.com/Home/Index

现在,如果人们开始链接到这两者,那么PageRank将被拆分.谷歌也会认为它是重复的内容,并惩罚其中一个,以避免重复他们的结果.

除此之外,URL不区分大小写,因此我们实际上也为这些URL获取相同的内容:

  • mydomain.com/Home/Index
  • mydomain.com/home/index
  • mydomain.com/Home/index
  • mydomain.com/home/Index
  • (列表还在继续)

所以,问题是......我如何避免这些处罚?我想要:

  • 所有将默认操作的请求重定向(301状态)到同一个URL
  • 所有URL都区分大小写

可能?

c# asp.net asp.net-mvc razor

23
推荐指数
3
解决办法
4300
查看次数

Google+ API:如何在每次启动应用时使用RefreshTokens来避免请求访问权限?

我正在尝试使用Google+ API访问经过身份验证的用户的信息.我已从其中一个示例中复制了一些代码,这些代码工作得很好(下图),但是我无法以一种可以在应用程序启动时重用令牌的方式工作.

我尝试捕获"RefreshToken"属性并使用provider.RefreshToken()(除其他外)并始终得到400 Bad Request响应.

有谁知道如何使这项工作,或知道我在哪里可以找到一些样品?在谷歌代码网站似乎并没有涵盖这:-(

class Program
{
    private const string Scope = "https://www.googleapis.com/auth/plus.me";

    static void Main(string[] args)
    {
        var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description);
        provider.ClientIdentifier = "BLAH";
        provider.ClientSecret = "BLAH";
        var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthentication);

        var plus = new PlusService(auth);
        plus.Key = "BLAH";
        var me = plus.People.Get("me").Fetch();
        Console.WriteLine(me.DisplayName);
    }

    private static IAuthorizationState GetAuthentication(NativeApplicationClient arg)
    {
        // Get the auth URL:
        IAuthorizationState state = new AuthorizationState(new[] { Scope });
        state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl); …
Run Code Online (Sandbox Code Playgroud)

.net c# google-api dotnetopenauth google-plus

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

没有强命名的代码签名是否会让您的应用程序被滥用?

试图了解authenticode代码签名和强命名.

我是否正确地认为,如果我对引用一些dll(不是强名称)的exe进行代码签名,恶意用户可以替换我的DLL并以一种看起来像是由我签名但正在运行的方式分发应用程序他们的代码?

假设这是真的,看起来你真的不想在没有强烈命名整个事情的情况下签署.NET应用程序,否则你会让人们能够在你编写的应用程序的幌子下执行代码?

我不确定的原因是,我在网上找到的文章(包括使用SN + Authenticode的MSDN文档)似乎都没有提到这一点,这似乎是一个相当重要的理解点(如果我理解正确) ?

.net c# strongname code-signing authenticode

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

如何指定安装NuGet包的目录?

如何指定我想要安装包的目录?因为我需要在其他开发人员工作的项目中安装软件包,当他们下载项目时,他们需要在你的电脑中安装所有软件包.

.net visual-studio nuget

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

在C#中访问F#区分联合类型数据的最简单方法是什么?

我试图了解C#和F#可以一起玩的程度.我从F#for Fun&Profit博客中获取了一些代码,该博客执行基本验证,返回一个有区别的联合类型:

type Result<'TSuccess,'TFailure> = 
    | Success of 'TSuccess
    | Failure of 'TFailure

type Request = {name:string; email:string}

let TestValidate input =
    if input.name = "" then Failure "Name must not be blank"
    else Success input
Run Code Online (Sandbox Code Playgroud)

试图在C#中使用它时; 我能找到访问成功和失败的值的唯一方法(失败是一个字符串,成功再次是请求)是一个大讨厌的演员(这是很多打字,并需要输入我希望的实际类型推断或在元数据中可用):

var req = new DannyTest.Request("Danny", "fsfs");
var res = FSharpLib.DannyTest.TestValidate(req);

if (res.IsSuccess)
{
    Console.WriteLine("Success");
    var result = ((DannyTest.Result<DannyTest.Request, string>.Success)res).Item;
    // Result is the Request (as returned for Success)
    Console.WriteLine(result.email);
    Console.WriteLine(result.name);
}

if (res.IsFailure)
{
    Console.WriteLine("Failure");
    var result = …
Run Code Online (Sandbox Code Playgroud)

.net c# f# functional-programming

20
推荐指数
4
解决办法
4407
查看次数

在Multiselect-Listbox中预选项目(MVC3 Razor)

我在列表框中预选项目时遇到问题.我正在使用带有mvc 3的剃刀视图引擎.我知道有一些帖子有同样的问题,但它们对我不起作用.

课程代码:

public class Foo{
    private int _id;
    private string _name;

    public string Name{
       get{
           return _name;
       }

    public int Id {
       get{
           return _id;
       }

}
Run Code Online (Sandbox Code Playgroud)

型号代码:

public class FooModel{

    private readonly IList<Foo> _selectedFoos;
    private readonly IList<Foo> _allFoos;

    public IList<Foo> SelectedFoos{
         get{ return _selectedFoos;}
    }

    public IList<Foo> AllFoos{
         get{ return _allFoos;}
    }

}
Run Code Online (Sandbox Code Playgroud)

cshtml中的代码:

 @Html.ListBoxFor(model => model.Flatschels, 
        Model.AllFlatschels.Select(fl => new SelectListItem {
             Text = fl.Name,
             Value = fl.Id.ToString(),
             Selected = Model.Flatschels.Any(y => y.Id == fl.Id)
   }), new {Multiple …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc razor asp.net-mvc-3

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

如何同步两个远程Git存储库?

我有两个存储库URL,我想要同步它们,使它们都包含相同的东西.在Mercurial,我想做的是:

hg pull {repo1}
hg pull {repo2}
hg push -f {repo1}
hg push -f {repo2}
Run Code Online (Sandbox Code Playgroud)

这将导致两个回购中的两个头(我知道有两个头是不常见的,但我这样做是为了同步并且它需要是非交互式的.头部将从一个回购手动合并然后同步再次运行).

我想在Git中做同样的事情.例如,在没有用户交互的情况下,将所有更改都记录到两个repos中,具有多个分支/头/稍后要合并的任何内容.我试图在命令中使用url来做这个,而不是添加remotes(?),因为可能涉及到一些repos,并且为它们设置别名将使我的脚本更复杂.

我正在克隆使用回购,git clone --bar {repo1}但我正在努力"更新"它.我试过了,get fetch {repo1}但似乎并没有把我的改变拉下来; git log仍然没有显示已在repo1中添加的变更集.

我也试过用--mirror在我pushclone,但似乎从repo2远程的变更是不存在本地,而我需要不断的改变来自两个回购协议:/

最好的方法是什么?

编辑:为了让我更清楚一点,我正在尝试做什么......

我有两个存储库(例如BitBucket和GitHub)并希望人们能够推送到任何一个(最终,一个将是Git,一个将是Mercurial,但我们假设他们现在都是Git以简化事情).我需要能够运行一个脚本,它将以两个包含两组更改的方式"同步"两个repos,并且可能需要稍后手动合并.

最终,这意味着我可以与其中一个repos(例如Mercurial)进行交互,我的脚本将定期提取我可以合并的Git更改,然后它们将被推回.

在Mercurial中,这是微不足道的!我只是从两个回购拉出来,并推动-f/--force以允许推动多个头.然后任何人都可以克隆其中一个回购,合并头,并推回.我想知道如何在Git中做最接近的类似事情.它必须是100%非交互式的,并且必须保持两个repos处于可以无限重复进程的状态(这意味着没有重写历史记录/更改更改集等).

git version-control dvcs github

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

Visual Studio的Dart插件

有没有人知道Visual Studio for Dart是否有设计器或插件,类似于Dart编辑器?

visual-studio dart

16
推荐指数
2
解决办法
2076
查看次数

为什么F#的printfn使用文字字符串,而不是字符串类型的值?

在以下F#代码中; 我希望它printfn被召唤三次; 每个都有一个字符串.但是,底线不会编译(The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>').

什么是前两行意味着这可以工作?它们不仅仅是弦乐吗?

open System

printfn ("\r\n") // Works
printfn ("DANNY") // Works
printfn (DateTime.Now.ToLongTimeString()) // Doesn't compile
Run Code Online (Sandbox Code Playgroud)

.net f#

16
推荐指数
2
解决办法
3507
查看次数

为什么`s => x.Append(s)`可以作为Action <string>传递但是`x.Append`不能?

试图通过一个时,我发现了一些奇怪StringBuilderAppend方法来夺走了一个功能Action<string>.

public void DoStuff(Action<string> handler)
{
    // Do stuff, call handler("data");
}
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我只想将数据写入a StringBuilder,所以我试着像这样调用它:

var output = new StringBuilder();
DoStuff(output.Append);
Run Code Online (Sandbox Code Playgroud)

但是,这会产生编译错误,因为该Append方法与所需的签名不匹配(它返回一个引用StringBuilder,而不是我的方法所需的void):

'System.Text.StringBuilder System.Text.StringBuilder.Append(string)'返回类型错误

不假思索,我把代码更改为:

var output = new StringBuilder();
DoStuff(s => output.Append(s));
Run Code Online (Sandbox Code Playgroud)

这编译好了.

然后我感到困惑; 意识到s => output.Append(s)还应该回归StringBuilder,不是他们一样吗?

那么,为什么这有效呢?为什么可以s => output.Append(s)静默丢弃返回值,但output.Append不能?

.net c# lambda

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