相关疑难解决方法(0)

如何解决“包罗万象的参数只能显示为路线模板的最后一段”的问题。

如果我有一个控制器,其操作方法使用基于属性的路由并像这样声明它,那么一切都很好:

    [HttpGet]
    [Route("/dev/info/{*somevalue}")]
    public IActionResult Get(string somevalue) {

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我可以路由到上述操作方法,例如通过指定以/dev/info/hello-world或结尾的 url/dev/info/new-world

然而,我的业务要求是有一个如下所示的网址:/dev/hello-world/info/dev/new-world/info 并且有无数这样的网址,它们都需要路由到控制器上的相同操作方法。

我想在操作方法上设置基于属性的路由,如下所示:

    [HttpGet]
    [Route("/dev/{*somevalue}/info/")]
    public IActionResult Get(string somevalue) {

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,网络项目运行后我就会收到以下错误:

处理请求时发生未处理的异常。RouteCreationException:属性路由信息发生以下错误:

对于操作:“App.SomeController.Get (1-wwwSomeProject)”错误:包罗万象的参数只能显示为路由模板的最后一段。参数名称:routeTemplate Microsoft.AspNetCore.Mvc.Internal.AttributeRoute.GetRouteInfos(IReadOnlyList actions)

必须有某种方法来解决此错误。知道办法吗?

asp.net-core-mvc asp.net-core asp.net-core-routing

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

我如何要求Owin/Katana将标头写入输出流?

当我写回复时,Katana会跳过发送Elapsed-Time响应头.在我第一次写入流之前,如何让它为我设置标题?

中间件#1

    public override async Task Invoke(IOwinContext context)
    {
        var stopwatch = new Stopwatch();

        stopwatch.Start();
        await Next.Invoke(context);
        stopwatch.Stop();

        context.Response.Headers.Add("Elapsed-Time", new[] {stopwatch.ElapsedMilliseconds.ToString()});
    }
Run Code Online (Sandbox Code Playgroud)

中间件#2

    public override async Task Invoke(IOwinContext context)
    {
        await context.Response.WriteAsync("test");
    }
Run Code Online (Sandbox Code Playgroud)

c# stream owin katana

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