7

我们已经多次尝试向我们的 Rails 服务器发送更新 PUT 请求,但我们不断收到 404“您要查找的页面不存在”

我们的更新方法非常简单(实际上是通用的 rails)。

def update
@user = User.find(params[:id])

respond_to do |format|
  if @user.update_attributes(params[:user])
    format.html { redirect_to @user, notice: 'User was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end

结尾

当我从命令行运行 CURL 来测试更新方法时,它工作正常。但是,当我在 Objective-c 中尝试相同的方法时,总是会导致 404 错误。

所以我的问题是:iOS 设备可以使用 NSURLConnection 向服务器发送 PUT 请求还是没有实现?

更新::

这不会更新数据库

NSString *dataString = @"user[first_name]=bob";
NSData *postBodyData = [NSData dataWithBytes: [dataString UTF8String] length:[dataString length]];
NSString *urlString = [NSString stringWithFormat:@"example.com/users/1.json"];
NSURL *fullURL = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
[request setHTTPMethod: @"PUT"];
[request setHTTPBody:postBodyData];
self.todoConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
receivedData = [NSMutableData data];

这会更新数据库

NSString *urlString = [NSString stringWithFormat:@"example.com/users/1.json?user[first_name]=bob"];
NSURL *fullURL = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
[request setHTTPMethod: @"PUT"];
self.todoConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
receivedData = [NSMutableData data];
4

3 回答 3

7

实际上@akshay1188 有一个可行的解决方案,但我认为更优雅的方法是在请求中添加“application/x-www-form-urlencoded”内容类型:

[request setHTTPMethod:@"PUT"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
于 2012-08-05T03:33:07.907 回答
6

你可以创建一个 NSMutableURLRequest 并设置 HTTP 方法:

- (void)setHTTPMethod:(NSString *)method

给它字符串@"PUT"

以下是如何从此类请求中创建 NSURLConnection。

NSMutableURLRequest *myMutableRequest[[NSMutableURLRequest alloc] initWithURL:myURL];
[myMutableRequest setHTTPMethod:@"PUT"];
[NSURLConnection connectionWithRequest:myMutableRequest delegate:myDelegate];
于 2012-06-07T19:27:55.427 回答
4

将 HTTP 方法类型设置为 @"POST"

并在请求正文中添加一个参数:@"PUT" for key @"_method"

它应该工作。

于 2012-07-25T07:01:38.723 回答