3

我刚刚从另一家公司接手了一堆 C# 代码,但在第一次构建工作时遇到了很大的麻烦。该代码使用了一个名为 Nancy 的框架,而不是 MVC。我以前从未使用过这个框架,我的问题可能有一个真正简单的答案,如果我错过了对 Nancy 的一些基本了解,我很抱歉,然后再在这里发布。

问题归结为一个类,处理应用程序的初始化(我认为)从我读过的内容来看,这是非常标准的南希:

using System;
using Nancy;
using NewRelicAgent = NewRelic.Api.Agent.NewRelic;
using Nancy.Bootstrapper;
using Nancy.Routing;

public class NewRelicStartup : IApplicationStartup
  {

    private readonly IRouteResolver routeResolver;
    public NewRelicStartup (IRouteResolver routeResolver)
    {
        this.routeResolver = routeResolver;
    }
    public void Initialize(IPipelines pipelines)
    {

        pipelines.BeforeRequest.AddItemToStartOfPipeline(
            context =>
            {
            var route = routeResolver.Resolve(context);
            if (route == null || route.Item1 == null || route.Item1.Description == null) // probably not necessary but don't want the chance of losing visibility on anything
            {
                NewRelicAgent.SetTransactionName(
                    context.Request.Method, 
                    context.Request.Url.ToString());
            }
            else
            {
                NewRelicAgent.SetTransactionName(
                    route.Item1.Description.Method,
                    route.Item1.Description.Path);
            }
            return null;
        });

        pipelines.OnError.AddItemToEndOfPipeline(
                (context, ex) => {
                    NewRelicAgent.NoticeError(ex);
                    return null;
                }
        );
    }
}

在构建此代码时,我遇到了几个错误,其中一些是:

Delegate 'System.Func<Nancy.NancyContext,System.Threading.CancellationToken,System.Threading.Tasks.Task<Nancy.Response>>' does not take 1 arguments

Cannot convert lambda expression to type 'Nancy.PipelineItem<System.Func<Nancy.NancyContext,System.Threading.CancellationToken,System.Threading.Tasks.Task<Nancy.Response>>>' because it is not a delegate type 

这是我得到的错误类型的屏幕截图:

https://www.dropbox.com/s/cigcfc4sfj8batg/Nancy%20Error.PNG

我 100% 确定,这是 Visual Studio 方面的某种解释问题,因为代码是实时 atm。我只是无法在VS中构建它。

你们有谁知道我错过了什么,或者做错了什么?记住; 该代码正在工作并且可以使用atm。

4

1 回答 1

3

尝试改变“return null;” 到“返回(Nancy.Response)null;”

编辑:抱歉,刚刚看了截图——它使用了一些在 0.20 中发生变化的属性,所以你要么必须手动修复代码(它现在核心是异步的),要么现在回滚到 0.19,然后重新- 以后再写那段代码。

再次编辑:在此之前给出:

        pipelines.BeforeRequest.AddItemToStartOfPipeline(
        context =>
        {
            var route = routeResolver.Resolve(context);

            if (route == null || route.Route == null || route.Route.Description == null) // probably not necessary but don't want the chance of losing visibility on anything
            {
                NewRelicAgent.SetTransactionName(
                    context.Request.Method,
                    context.Request.Url.ToString());
            }
            else
            {
                NewRelicAgent.SetTransactionName(
                    route.Route.Description.Method,
                    route.Route.Description.Path);
            }
            return null;
        });
于 2013-09-24T13:46:54.333 回答