我正在尝试在ServiceStack中构建一个服务,它的唯一职责是解释请求,并发送重定向响应。像这样:
[Route("/redirect/", "POST")
public class Redirect : IReturnVoid
{
public string Something { get; set; }
}
public class RedirectService : Service
{
public object Post(Redirect req)
{
// make some decisions about stuff
return new HttpResult(){ StatusCode = HttpStatusCode.Redirect, Headers = {{HttpHeaders.Location, "place"}}};
}
}
我使用fiddler进行了初始测试,设置了application / json的内容类型并创建了一个合适的请求体。这完全符合预期:服务请求给出了302响应并重定向到预期位置。
我还使用基本的Html表单帖子测试了这一点,其动作为http://myserviceuri/redirect/
,它也可以按预期工作并适当地重定向。
但是,在尝试使用SS c#客户端来调用相同的服务时遇到了问题。如果我在后面的aspx代码或mvc控制器中调用以下代码
var client = new JsonServiceClient("uri);
client.post(new Redirect{Something = "something});
我收到500并收到错误消息:
The remote certificate is invalid according to the validation procedure.
这是有道理的,因为它是一个开发服务器,具有自我证书。但我觉得,正如我可以通过其他方式成功地呼叫该服务,这是一个红色的鲱鱼。
我应该使用不同类型的c#客户端来发出请求,还是设置更多自定义标头或其他内容?我从根本上不理解我想要做什么吗?
如果需要更多信息,请告诉我。感谢。
答案 0 :(得分:1)
这里发生的事情是JsonServiceClient
很乐意跟随重定向,做的比你预期的要多。
我会为后人提及一个相关的问题和答案( - 希望你很久以前就已经解决了这个问题......)。
POST to ServiceStack Service and retrieve Location Header
基本上你会使用.net的WebRequest
或答案中提到的ServiceStack扩展来查看重定向并按你认为合适的方式行事。