2013-04-09 44 views
3

我试图在ServiceStack中构建一项服务,该服务的唯一职责是解释请求并发送重定向响应。是这样的:在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"}}}; 
    } 
} 

我没有使用初始测试提琴手,设置一个内容类型application/JSON的和创建的适当请求body.This并完全按预期:所述服务请求给一个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#客户端来发出请求,还是设置更多的自定义标题或其他内容?我从根本上不理解我在做什么?

如果需要更多信息,请让我知道。谢谢。

回答

1

这里发生的事情是,JsonServiceClient很高兴地遵循重定向,做的比你期望的要多。

我会为后代引用一个相关的问题和答案(希望很久以前你已经解决了这个问题...)。

POST to ServiceStack Service and retrieve Location Header

基本上你会使用.NET的WebRequest或在回答中提到的ServiceStack扩展程序,看看重定向和行为,你认为合适。