gpt4 book ai didi

c# - 使用ASIFormDataRequest时如何实现C#服务器端?

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:24 27 4
gpt4 key购买 nike

我正在尝试使用 ASIFormDataRequest 将数据发送到 ASP.net 服务器端。我创建了一个aspx页面。目前我可以得到这两个纯文本。但是我不知道如何通过 Request.Form 在 C# 中使用 NSdata。

这是 Obj-C 代码:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"name"];
[request setPostValue:@"Copsey" forKey:@"code"];
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];

这是当前的 C# 代码:

 string name = Request.Form["name"] == null ? "" : Request.Form["name"];
string code = Request.Form["code"]==null?"":Request.Form["code"];

如您所见,在 iphone 中,我尝试将图像发送到 C# 服务器端,但我不知道该怎么做?

最佳答案

要使用 ASIFormDataRequest 将图像向下发送到 WCF REST 服务。这是我们在生产中的一个项目的示例...

假设我在名为“image”的 var 中有一个 UIImage

NSString *surl = @"http:www.SomeRestService.com"    
NSURL *url = [NSURL URLWithString:surl];

ASIFormDataRequest *r = [ASIFormDataRequest requestWithURL:url];
[r setValidatesSecureCertificate:NO];
[r setTimeOutSeconds:30];
[r setRequestMethod:@"POST"]; //default is POST (insert),
[r setDelegate:self];
[r setDidFailSelector:@selector(requestDidFail:)];
//[r addRequestHeader:@"Content-Type" value:@"application/json"] this will cause the call to fail. No content-type header for this call.


NSMutableData *imageData = [NSMutableData dataWithData:UIImageJPEGRepresentation(image, .35)]; //we are really compressing our images.. you can do what you want, of course.
[r setPostBody:imageData];
[r setDidFinishSelector:@selector(imageSaveDidFinish:)];
[r startAsynchronous];

好的,在 WCF 端,您需要定义一个接收 System.IO.Stream 的方法,并且 Stream 需要是定义的最后一个参数,它应该是一个 POST,并且不应包含任何其他参数POST 主体的一部分(您可以在 URL 和查询字符串中定义参数,尽管一些纯粹主义者会说这对于 REST POST 来说是不好的形式)。

[WebInvoke(UriTemplate = "Upload", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]
public GenericObject SaveReceiptImage(System.IO.Stream imageStream)
{
try
{
byte[] buffer = new byte[16 * 1024];

using (MemoryStream ms = new MemoryStream())
{
int read = 0;
while ((read = imageStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}

ms.Position = 0;

if (ms.Length > 0)
{
//save your byte array to where you want
}
else
{
// woops, no image was passed in
}
}
}
catch (Exception ex)
{
//bad error occured, log it
}

return whatever;
}

关于c# - 使用ASIFormDataRequest时如何实现C#服务器端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com