我收到一个包含来自其他服务的有效JSON的字符串.我想用Nancy转发这个字符串,但也将内容类型设置为"application/json",这将允许我删除在客户端使用$ .parseJSON(数据)的需要.
如果我使用Response.AsJson,它似乎会破坏字符串中的JSON并添加转义字符.我可以用字符串创建一个Stream并设置响应类型如下:
Response test = new Response();
test.ContentType = "application/json";
test.Contents = new MemoryStream(Encoding.UTF8.GetBytes(myJsonString));
Run Code Online (Sandbox Code Playgroud)
但是想知道是否有更简单的方法?
我正在使用NancyFx构建一个Web API,但是从URL获取参数时我遇到了一些问题.
我需要向API发送请求.../consumptions/hourly?from=1402012800000&tags=%171,1342%5D&to=1402099199000并捕获参数的值:granularity,from,tags和to.我尝试了几个approches,没有一个工作.我试过,例如,
Get["consumptions/{granularity}?from={from}&tags={tags}&to={to}"] = x =>
{
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
路易斯桑托斯
还有另一个用于进行名为NancyFx的HTTP调用的框架.我的问题是使用它有什么好处.我快速查看了文档:
https://github.com/NancyFx/Nancy/wiki/Documentation
看起来没有突出的功能,因此我想使用它.通过WebHttp使用它有什么好处?
PS:我一直在读一些不断重复的"超级快乐路径"的奇怪短语.除了这种"超级快乐的道路"之外还有什么东西吗?实现了哪些真正的功能
我在Nancy中提供JavaScript等静态内容时遇到了麻烦.
例如,使用自托管示例我已将一个test.js添加到Views文件夹并添加了一个
<script type="text/javascript" src="test.js"></script>
Run Code Online (Sandbox Code Playgroud)
标记到staticview.html页面.如果我在浏览器中查看此页面,则JavaScript正确执行.
但是,当我运行示例时,JavaScript不会被执行.如果我在FireBug中查看该页面,我发现我收到了test.js的404错误.
我试过添加
Get["{file}"] = p =>
{
string path = string.Format("Views/{0}", p.file);
return Response.AsJs(path);
};
Run Code Online (Sandbox Code Playgroud)
当我设置一个断点并在即时窗口中执行Response.AsJs(path)时,我得到一个NotFound的StatusCode
我也尝试过添加一个StaticContentConvention,比如
protected override void ConfigureConventions(NancyConventions conventions)
{
base.ConfigureConventions(conventions);
conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("/", "Views"));
conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("Views", "Views"));
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我是Nancy的新手,我想要返回一个自定义的HttpStatusCode和一个body(内容).如果我返回一个HttpStatusCode,它将返回一个空白的主体.如果我返回一个字符串,那么它将返回该字符串,但总是使用200状态代码OK.
public class SendSMS : NancyModule
{
public SendSMS()
{
Post["/SendSMS"] = parameters =>
{
return HttpStatusCode.BadRequest; // this works, no body
return "Missing \"to\" parameter"; // this works, 200 status code
// want to return status code with message
};
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用NancyFX创建的API服务,以及一些前端开发人员针对此API创建SPA JS客户端.
我们希望针对已发布的服务器测试客户端代码,而无需以过多的频率发布客户端代码.
但是,客户端在localhost运行,服务器在Windows Azure.
在NancyFX服务器上启用CORS是否可行且容易?我怎样才能做到这一点?
谢谢.
所以我一直在尝试将http模块映射到MVC3站点的子路径.它应该很简单,因为我理解它,但它没有工作.模块设置如下:
<handlers>
<add name="Nancy" path="api/*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
iis6也有匹配部分,所以我可以在webdev.webserver下运行它.然而,测试部署到我的本地iis7(在Win7下)和webdev.webserver,只有/ api实际上调用处理程序.如果我调用/ api/{anything}它只返回404.
我确定我只是"做错了(tm)",但任何帮助都会受到赞赏.
注意:我还尝试了其他一些配置,包括使用标记和创建/ api文件夹,并使用完整的通配符将web.config添加到该文件夹.
我已经创建了一个自托管的Nancy/SignalR应用程序,它使用Microsoft.Owin.Host.HttpListener和在OWIN中自托管Microsoft.Owin.Hosting
事情在本地工作得很好但是一旦我尝试使用除localhost之外的任何东西来访问应用程序我就会收到HTTP Error 503. The service is unavailable错误.我甚至无法使用127.0.0.1或使用机器名称访问应用程序.
我已经尝试将端口添加到urlacl使用
http add urlacl http://*:8989/ user=EVERYONE 但似乎没有做任何事情.
这是我试过的OWIN启动选项,
var options = new StartOptions
{
Url = "127.0.0.1",
App = GetType().AssemblyQualifiedName,
Port = _configFileProvider.Port
};
var options = new StartOptions
{
App = GetType().AssemblyQualifiedName,
Port = _configFileProvider.Port
};
Run Code Online (Sandbox Code Playgroud)
这是启动和停止服务器的文件的源代码 https://github.com/NzbDrone/NzbDrone/blob/vnext/NzbDrone/Owin/OwinHostController.cs
我正在努力将Nancy Framework添加到我的C#控制台应用程序中(遵循这里非常简短的教程,当我转到http:// localhost:1234时它会加载一个空白页面,所以我知道它正在启动,但它没有显示我的文本正确.我已经多次查看我的代码,但没有看到任何问题.
我已将Nancy和Nancy.Hosting.Self添加到我的项目中.
static void Main(string[] args)
{
var nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:1234"));
nancyHost.Start();
Console.ReadLine();
nancyHost.Stop();
}
namespace DaemonApp
{
class MainModule : Nancy.NancyModule
{
public MainModule()
{
Get["/"] = parameters =>
{
return "Hello world!";
};
}
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了一些打印行,当我访问页面时它从不调用模块.有没有人知道问题是什么?
我正在使用Corona SDK将数据发布到我的C#服务器:
headers["Content-Type"] = "application/x-www-form-urlencoded"
headers["Accept-Language"] = "en-US"
local body = "color=red&size=small"
local params = {}
params.headers = headers
params.body = body
network.request( host .. "/UpdateHand", "POST", nwListener, params )
Run Code Online (Sandbox Code Playgroud)
我在服务器上收到一条消息:
Post["/UpdateHand"] = x =>
{
Console.WriteLine("Received ...");
return "Ok";
};
Run Code Online (Sandbox Code Playgroud)
但是当我检查数据时(当我在其上放置一个断点)时,我看不到我的数据所在的位置(即params.body或params.headers).我该如何提取这些信息?
我应该根据Corona上的文档正确发布它:http://docs.coronalabs.com/daily/api/library/network/request.html