编程语言
首页 > 编程语言> > c#-有关MVC的Nancy Framework(和NewRelic)的问题

c#-有关MVC的Nancy Framework(和NewRelic)的问题

作者:互联网

我刚从另一家公司那里接过一堆C#代码,但要使第一个版本开始工作却遇到了很大的麻烦.该代码使用称为Nancy的框架,而不是MVC.我以前从未使用过此框架,可能只有一个真正简单的答案可以回答我的问题,如果我错过了有关Nancy的一些基本知识,请在此处表示歉意.

这个问题归结为一个类,处理应用程序的初始化(我认为)从我读到的内容来看,这是非常标准的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中构建它.

你们中的任何人是否知道我的缺失或做错了什么?记得;该代码可以正常工作并且可以正常工作.

解决方法:

尝试更改“返回null;” “返回(Nancy.Response)为空;”

编辑:抱歉,只看了屏幕截图-它使用的是一些已更改为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;
        });

标签:newrelic,nancy,c,net
来源: https://codeday.me/bug/20191122/2061992.html