当前位置: 首页 > 知识库问答 >
问题:

服务堆栈不起作用

姜嘉良
2023-03-14

我正试图用服务栈实现Swagger。我已经用nuget安装了带有swagger的服务栈。当前的DLL版本大多报告为3.9.56.0。

我正在努力遵循…https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/SwaggerHelloWorld提供的例子

这个指令看起来相当简单...

Plugins.Add(new ServiceStack.Api.Swagger.SwaggerFeature());

在我通过nuget安装后(按照文档说明),进入“配置”方法,然后我添加了[ApiMember]和[Api]标记,并对[Route]标记进行了更改,以添加摘要和注释

但当我访问~/swagger ui/index时。html我得到错误

Please specify the protocol for ../api

我的api位于~/api,目前我有一个方法(Hello World)位于~api/Hello/{name},它返回JSON并正常工作。

如果我访问~api,我得到消息请求处理程序未找到:与堆栈跟踪类型输出。

我做错了什么?启用 swagger 的说明看起来非常简单明了,并且似乎缺少详细的说明,可能是因为它应该“正常工作”,请帮忙!

更新以解决埃斯克尔...

堆栈跟踪@myhost:54011/api

Handler for Request not found: 


Request.ApplicationPath: /
Request.CurrentExecutionFilePath: /api
Request.FilePath: /api
Request.HttpMethod: GET
Request.MapPath('~'): D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\
Request.Path: /api
Request.PathInfo: 
Request.ResolvedPathInfo: /api
Request.PhysicalPath: D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\api
Request.PhysicalApplicationPath: D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\
Request.QueryString: 
Request.RawUrl: /api
Request.Url.AbsoluteUri: http://localhost:54011/api
Request.Url.AbsolutePath: /api
Request.Url.Fragment: 
Request.Url.Host: localhost
Request.Url.LocalPath: /api
Request.Url.Port: 54011
Request.Url.Query: 
Request.Url.Scheme: http
Request.Url.Segments: System.String[]
App.IsIntegratedPipeline: True
App.WebHostPhysicalPath: D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger
App.WebHostRootFileNames: [global.asax,global.asax.cs,helloservice.cs,jquery-1.10.2.js,packages.config,servicestackswagger.csproj,servicestackswagger.csproj.user,web.config,web.debug.config,web.release.config,app_data,app_start,bin,controllers,dto,models,obj,properties,swagger-ui,views]
App.DefaultHandler: metadata
App.DebugLastHandlerArgs: GET|/api|D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\api

此外,“请指定协议”是一个招摇错误,显示在屏幕上的html中,位于上述“更改发现网址的文本框”下方

并且DLL版本“大部分”是相同的,因为ServiceStack。Redis的版本是3.9.57.0,但是我没有使用它,所以“大部分情况下”

更新…我的解决方案

我需要在我的网站上找到这个。中的config文件

<!-- ServiceStack: CustomPath /api -->
<location path="api">
    <system.web>
      <httpHandlers>
        <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
      </httpHandlers>
    </system.web>

    <!-- Required for IIS 7.0 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
      </handlers>
    </system.webServer>
  </location>

也。。。我已经这样设置了我的“路线”...

//INCORRECT
[Route("/api/Hello/{name}", Summary = @"N031'5 ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes")]    
    public class Hello : IReturn<HelloResponse>

但这扰乱了swagger的功能,它需要...

//CORRECT   
[Route("/Hello/{name}"...

删除了“api”位,现在一切正常。


共有1个答案

岳嘉容
2023-03-14

您需要告诉Swagger ServiceStack Swaggerendpoint的特定URL,而不是服务的基本URL。此endpoint位于基本URL下的/resources。因此,在索引中使用../api/resources代替查找Url。html文件:

window.swaggerUi = new SwaggerUi({
    discoveryUrl: '../api/resources',
    ...

 类似资料:
  • 问题内容: 有没有正确的方法来更新IRedisList?使用下面的示例代码,我可以对其进行修改以删除列表,更新披萨并重新添加列表,但这感觉不对。命令行文档非常繁琐,但是比我要大得多,而且我不确定要从哪里开始寻找。 问题答案: 避免列表: 不幸的是,在这种情况下,Redis列表 并不是真正的好选择 。当我开始使用Redis时,我遇到了同样的问题, 它们似乎是显而易见的选择;)。 如果您将Redis列

  • React.js:我有一个谷歌登录按钮,看起来像这样 ) React.js(超文本传输协议-proxy-middleware)在开发模式下,我也有代理设置。 Node.js:我有这个endpoint,但是它不能在生产环境中工作,因为代理不能在生产环境中工作 ); **当我点击生产上的按钮时,react会将我发送到页面,例如:www.example。com/auth/google-但必须调用节点en

  • 我的导航有问题。这是我的导航码。 我创建了三个堆栈,如AppStack、StartStack和AuthStack。这些是在createAppContainer()函数中使用的,希望访问这些 this.props.navigation.navigate('App') ... 我可以访问 this.props.navigation.navigate(开始) 和 this.props.navigatio

  • 问题内容: 下面的代码有任何错误吗?以下代码无法提供多个目录服务。当我访问localhost:9090 / ide时,服务器将返回404错误。 当我这样更改代码时, 它会按我预期的那样工作。 问题答案: 使用中的问题之一是请求路径用于构建文件名,因此,如果要从根目录以外的任何地方提供服务,则需要剥离到该处理程序的路由前缀。 标准库为此提供了一个有用的工具,但该工具只能在s上使用,而不能在s 上使用

  • 输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到

  • 我使用这段代码通过JAVA运行简单的TCP服务器,并使用Socket协议android应用程序作为客户端。问题是,当客户端连接时,我会发送消息,服务器端什么都不做,直到我断开客户端的连接,之后会出现消息。我认为在while((inputLine=in.readLine())!=空)