我正在尝试从Web API发布一个JsonObject使用HttpClient.我不太确定如何解决这个问题,并且在示例代码方面找不到多少内容.
这是我到目前为止所拥有的:
var myObject = (dynamic)new JsonObject();
myObject.Data = "some data";
myObject.Data2 = "some more data";
HttpClient httpClient = new HttpClient("myurl");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.Post("", ???);
Run Code Online (Sandbox Code Playgroud)
我想我需要把我JsonObject当成一个StreamContent但是我已经挂了这一步.
我试图调用的API要求我执行POST但空体.我是新手使用WCF Web API HttpClient,我似乎无法找到可以用空体做帖子的写代码.我找到了一些HttpContent.CreateEmpty()方法的引用,但我认为这不是Web API HttpClient代码,因为我似乎无法找到该方法.
我正在开发一个Web API,我想出的一个测试是,如果客户端使用物理测试ID进行GET操作(物理测试是我正在寻找的资源)并且找不到物理测试,Web API应返回404状态.
现在,我正在使用moq框架进行测试,我有以下代码:
[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
var unitOfWork = new Mock<IUnitOfWork>();
var repository = new Mock<IRepository<PhysicalTest>>();
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
var pt = new PhysicalTestResource(unitOfWork.Object);
HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}
Run Code Online (Sandbox Code Playgroud)
我需要Returns()方法来返回一个null对象,如果找不到资源,它将是实际API方法返回的对象.
我尝试在Returns()方法中将null作为参数发送但没有成功.
WCF和Web API以及WCF REST和Web服务有什么区别?WCF真的如此复杂以至于应该使用webapi吗?WebApi能否完成所有工作而不利用其他工作?
有没有办法做到这一点 ...
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
Run Code Online (Sandbox Code Playgroud)
...编程?
原因是我想在集成测试我的服务时直接将我的服务实例传递给我的自托管助手类.
我正在使用Castle Windsor来创建我的所有对象,这在使用测试网站时工作正常.但是当我尝试使用我的HttpWebService帮助程序类时,我收到以下错误...
System.InvalidOperationException was unhandled by user code
Message=In order to use one of the ServiceHost constructors that takes a service instance, the InstanceContextMode of the service must be set to InstanceContextMode.Single. This can be configured via the ServiceBehaviorAttribute. Otherwise, please consider using the ServiceHost constructors that take a Type argument.
Source=System.ServiceModel
Run Code Online (Sandbox Code Playgroud)
这是我的助手类的构造函数......
public HttpWebService(string baseUri, string acceptType, TApi serviceInstance = null)
{
_baseUri = baseUri;
_acceptType = acceptType.ToLower();
_host = serviceInstance == …Run Code Online (Sandbox Code Playgroud) 我以前使用WCF WebAPI做了一些工作,并且非常喜欢它的很多功能,我现在只是玩ASP.NET Web API,它看起来完全不同(IE完全从WCF中删除).
有谁知道ASP.NET 4 Web API中包含WCF WebAPI的哪些功能?
我有一个ASP.NET Web API服务,它在启用了Windows身份验证的Web服务器上运行.
我有一个基于MVC4构建的客户端站点,它运行在同一Web服务器上的不同站点上,该站点使用HttpClient从服务中提取数据.此客户端站点在启用身份模拟的情况下运行,并且还使用Windows身份验证.
Web服务器是带有IIS 7.5的Windows Server 2008 R2.
我遇到的挑战是让HttpClient通过当前的Windows用户作为其身份验证过程的一部分.我已经以这种方式配置了HttpClient:
var clientHandler = new HttpClientHandler();
clientHandler.UseDefaultCredentials = true;
clientHandler.PreAuthenticate = true;
clientHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
var httpClient = new HttpClient(clientHandler);
Run Code Online (Sandbox Code Playgroud)
我的理解是,在启用了身份模拟的情况下运行站点,然后以这种方式构建客户端应该导致客户端使用当前登录用户的模拟身份对服务进行身份验证.
这不会发生.事实上,客户端似乎根本没有进行身份验证.
该服务配置为使用Windows身份验证,这似乎完美.我可以在我的网络浏览器中访问http:// server/api/shippers并提示进行Windows身份验证,输入后我会收到请求的数据.
在IIS日志中,我看到收到的API请求没有进行身份验证并收到401质询响应.
关于这个的文档似乎很少.
我需要深入了解可能出现的问题或使用此应用程序使用Windows身份验证的其他方法.
谢谢,克雷格
windows-authentication iis-7.5 wcf-web-api asp.net-mvc-4 asp.net-web-api
我刚刚安装了mvc4 rc更新,我正在尝试构建一个运气不好的api应用程序.
我正在使用ninject但是无法加载我的控制器.我一直在收到错误
类型'Api.Controllers.ConsumerController'没有默认构造函数
我对mvc和使用注射剂都很新,所以请耐心等待.
我没有对通过nuget创建的默认绑定做任何特殊操作
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => …Run Code Online (Sandbox Code Playgroud) 我在项目中使用新的Web API位,我发现我无法正常使用HttpMessageRequest,因为我需要将客户端证书添加到请求中.结果,我正在使用HttpClient(所以我可以使用WebRequestHandler).这一切都很好,除了它不是存根/模拟友好,至少对于Rhino Mocks.
我通常会创建一个HttpClient我将使用的包装器服务,但我想尽可能避免这种情况,因为我需要包装很多方法.我希望我遗漏了一些东西 - 关于如何存根的任何建议HttpClient?
这可能是一个通用的安全问题,但我想我会在我正在开发的内容中提出这个问题.
场景是:一个Web服务(WCF Web Api),它使用API Key来验证并告诉我用户是谁,以及前端的jQuery和应用程序的混合.
一方面,流量可以是https,因此无法检查,但如果我每个用户使用相同的密钥(比如一个guid),并且我在两者中都使用它,那么就有可能采取它并且有人可以冒充用户.
如果我实现类似于OAuth的东西,那么会生成一个用户和每个应用程序密钥,这可能会起作用 - 但是对于jQuery方面,我还需要javascript中的应用程序API密钥.
如果某人在实际计算机上并且执行了视图源,那么这只会是一个问题.
我该怎么办?
我敢肯定这可能是一个常见的问题 - 所以任何指针都会受到欢迎.
为了使这更清楚 - 这是我写的API,我写的是我要查询,而不是谷歌等.所以我可以做每个会话令牌等,我只是想找出最好的方法来保护客户端我会用的代币/钥匙.
我在这里有点过于谨慎,但只是用它来学习.
wcf-web-api ×10
c# ×5
wcf ×3
web-services ×2
ajax ×1
asp.net ×1
httpclient ×1
iis-7.5 ×1
javascript ×1
mocking ×1
moq ×1
rest ×1
rhino-mocks ×1
security ×1
unit-testing ×1