相关疑难解决方法(0)

ServiceStack与ASP.Net Web API

我想编写一个新的REST样式API并查看ServiceStack并且非常喜欢它.但是,我已经看到Microsoft已经发布了ASP.Net Web API项目,作为新MVC 4 beta的一部分.有没有人看过新的Web API项目?你能给出每个系统的优缺点吗?

servicestack asp.net-web-api

298
推荐指数
4
解决办法
8万
查看次数

WCF REST服务中的CORS支持

我有一个在Windows服务中托管的WCF REST服务,我希望每次响应都发送Access-Control-Allow-Origin HTTP标头(定义为CORS的一部分).

我尝试的解决方案是在IDispatchMessageInspector实现中使用以下内容:

public void BeforeSendReply(ref Message reply, object correlationState)
{
    var httpResponse = reply.Properties["httpResponse"] as HttpResponseMessageProperty;
    if (httpResponse != null)
    {
        // test of CORS
        httpResponse.Headers["Access-Control-Allow-Origin"] = "*";
    }
}
Run Code Online (Sandbox Code Playgroud)

通常这可以工作,但不幸的是我的服务也使用HTTP基本授权,这意味着当请求进入而没有Authorization标头时,WCF会自动发送401响应,要求提供凭据.遗憾的是,在此初始交换期间,WCF不会调用我的IDispatchMessageInspector,因此Access-Control-Allow-Origin标头不会添加到初始交换中.

当我尝试从浏览器调用服务时,会出现此问题.CORS指定仅当源域与Access-Control-Allow-Origin响应头中列出的域匹配时才允许跨源请求(*匹配所有域).不幸的是,当浏览器看到没有Access-Control-Allow-Origin标头的初始401响应时,它会阻止访问(根据相同的源策略).

有没有办法在WCF自动发送的初始401响应中添加标头?

.net c# wcf wcf-rest cors

19
推荐指数
2
解决办法
2万
查看次数

WCF的替代品

我目前正在使用WCF实现一个Silverlight应用程序,用于客户端和服务器之间的通信.我听说使用WCF我们必然会在客户端使用一些Microsoft技术,并且不能轻易地将其替换为"任何东西" - 至少使用WPF的默认SOAP实现.

所以我的问题是:

  • 这是真的?
  • Restful WCF服务怎么样?我描绘了一个简单的REST实现,任何客户端都可以通过REST与该服务器端进行通信.是?没有?
  • 扔掉WCF的(好的)替代方案是什么?为什么我要这样做?

service wcf

18
推荐指数
2
解决办法
2万
查看次数

ServiceStack是否支持二进制响应?

ServiceStack服务中是否有任何机制可以返回流/大二进制数据?WCF的MTOM支持很难但在返回大量数据时却没有文本转换开销.

servicestack

15
推荐指数
2
解决办法
9382
查看次数

ServiceStack并返回一个流

我刚刚开始使用ServiceStack这是一个了不起的库.

但是,我有一个业务需求,我们必须返回xml和json,其中xml必须是特定格式.

例如,我们现有的客户期望xml的格式:

<service name="service1" type="audio" .../>
Run Code Online (Sandbox Code Playgroud)

所以基本上是一堆属性.

我知道ServiceStack使用DTO的概念并使用DataContractSerializer返回xml元素而不是上面的表单中的xml属性.

我仍然希望将DTO用于请求(在Accept头中传入application/xml或application/json)然后我可以创建自己的xml字符串或json字符串,然后将它们返回为:

string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
Run Code Online (Sandbox Code Playgroud)

其中结果字符串可以是xml字符串或json字符串.

我在fiddler中注意到Content-Type的响应为text/html.

根据我使用的方法,我违反了任何REST原则吗?Content-Type是否会出现问题(text/html)?

如果我使用这种方法,它确实解决了业务需求.

编辑

我发现我可以返回一个httpResult:

return new HttpResult(
         new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
Run Code Online (Sandbox Code Playgroud)

它给出了正确的内容类型.

那么,这是正确的方式,还是如果我沿着这条路走下去,我会遇到什么问题?

servicestack

12
推荐指数
1
解决办法
1万
查看次数

wcf json网络服务

创建JSON Web服务的最佳方法是什么?我们有另一个使用Java的团队,他们坚持使用JSON完成所有通信.我更愿意使用WCF而不是任何第三方框架.

我发现这个博客:http://www.west-wind.com/weblog/posts/164419.aspx,它表明微软的实现存在M $特定废话的缺陷.

.net c# wcf json

10
推荐指数
2
解决办法
2万
查看次数

返回304 Not Modified with ServiceStack时防止不需要的标头

使用ServiceStack,我只想返回304 Not Modified:

HTTP/1.1 304 Not Modified
Run Code Online (Sandbox Code Playgroud)

但ServiceStack添加了许多其他不需要的(返回带有304代码的HttpResult)标头:

HTTP/1.1 304 Not Modified
Content-Length: 0
Content-Type: application/json
Server: Microsoft-HTTPAPI/2.0
X-Powered-By: ServiceStack/3.94 Win32NT/.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type
Date: Tue, 07 Aug 2012 13:39:19 GMT
Run Code Online (Sandbox Code Playgroud)

如何防止输出其他标题?我已经尝试了HttpResult的各种方法,注册了一个虚拟内容类型过滤器,但是它的名字仅暗示控件内容,而不是标题或此处列出的其他内容.我也尝试使用IStreamWriter和IHasOptions实现我自己的IHttpResult派生,结果相同:ServiceStack添加了不需要的标头.

谢谢

更新

能够去除content-type通过使用以下,但有些头依然存在,即content-length,serverdate.

    public override object OnGet(FaultTypes request)
    {
      var result = new HttpResult
      {
       StatusCode = HttpStatusCode.NotModified,
       StatusDescription = "Not Modified", // Otherwise NotModified written!
      }; …
Run Code Online (Sandbox Code Playgroud)

http-status-code-304 servicestack

6
推荐指数
1
解决办法
2350
查看次数

ServiceStack Backbone.Todos不允许删除405

我意识到点击Backbone.Todos示例"清除x已完成的项目"我得到DELETE 405不允许...

我从以前的帮助和文档中了解到,如果我想启用DELETE PUT PATCH ...我需要设置

X-http-method-override : DELETE

如果它是一个表格或jquery.

但我不确定如何在Backbone.Todos示例中完成此操作,因为我是backbone.js的新手.

你能指出如何修复DELETE 405吗?谢谢.

编辑---------------------------------------

我总是可以改变路线......

[Route("/todos/add")] //C - post
[Route("/todos/{id}")] //R - get
[Route("/todos/{id}/edit")] //U - post
[Route("/todos/{id}/delete")] //D - post
Run Code Online (Sandbox Code Playgroud)

所以,只有Post和Get足以完成这项工作.但与以下相比,它看起来并不十分宁静:

[Route("/todos/{id}", "Delete")] //D - delete
Run Code Online (Sandbox Code Playgroud)

可以?

c# http-status-code-405 backbone.js servicestack

6
推荐指数
1
解决办法
1898
查看次数

ServiceStack CORS功能

使用新的Service实现,我是否必须为我的所有服务提供Options方法?

使用我的所有服务当前使用的旧ServiceBase方法,OPTIONS在没有Access-Control-Allow-Origin标头的情况下返回OK.

这是一个例子:

https://github.com/JonCanning/SSCors

HelloService使用Service

GoodbyeService使用ServiceBase

cors servicestack

4
推荐指数
1
解决办法
4579
查看次数

在IIS7.5上找不到ServiceStack的PUT处理程序

我目前正在使用serviceStack来创建托管在MVC Web应用程序中的基于REST的服务.

到目前为止,ServiceStack已经令人惊叹,我已经实现了大部分我想要做的工作.所有这些都适用于IISExpress.

我现在已经转移到IIS 7.5,我在执行PUT时得到400错误,即"找不到请求处理程序".GET工作正常,在IISExpress上PUT和GET都能正常工作.

在IISExpress上,这一切都奏效了.

有任何想法吗?

iis-7.5 servicestack

3
推荐指数
1
解决办法
2274
查看次数

ServiceStack是否支持多个来源的CORS?

使用CorsFeature插件,我如何支持多个源域?我不是在说这里的通配符"*".我说的是在传递一个以上的起源的名单:" http://firstdomain.com,http://seconddomain.com ".

servicestack

2
推荐指数
1
解决办法
1136
查看次数