最近基于AF3.0简单的封装了请求post、get、put、patch、delete的请求方式:
头文件AFNetworkRequest.h
#import <Foundation/Foundation.h>
//请求方式:post、get、put、patch、delete
typedef NS_ENUM(NSUInteger, RequestMethod) {
Request_POST = 0,
Request_GET,
Request_PUT,
Request_PATCH,
Request_DELETE
};
@interface AFNetworkRequest : NSObject
/**
* AFNetworking请求方法
*
* @param method 请求方式 Request_POST / Request_GET / Request_PUT / Request_PATCH / Request_DELETE
* @param parameters 请求参数 --支持NSArray, NSDictionary, NSSet这三种数据结构
* @param url 请求url字符串
* @param success 请求成功回调block
*/
+ (void)AFNetworkRequestWithRequestMethod:(RequestMethod)method
parameters:(NSMutableDictionary *)parameters
url:(NSString *)url
success:(void (^)(NSDictionary *dict))success
failure:(void (^)(NSError *error))failure;
AFNetworkRequest.m
其中XLog(@"")为打印;ALERT_SHOW(@"")是提示性信息
#import "AFNetworking.h"
#import "AFNetworkRequest.h"
#import "AlertShow.h" //自己写的提示样式
@interface AFNetworkRequest ()
//错误状态码 iOS-sdk里面的 NSURLError.h 文件
typedef NS_ENUM (NSInteger, AFNetworkErrorType) {
AFNetworkErrorType_TimedOut = NSURLErrorTimedOut,//-1001 请求超时
AFNetworkErrorType_UnURL = NSURLErrorUnsupportedURL,//-1002 不支持的url
AFNetworkErrorType_NoNetwork = NSURLErrorNotConnectedToInternet,//-1009 断网
AFNetworkErrorType_404Failed = NSURLErrorBadServerResponse,//-1011 404错误
AFNetworkErrorType_3840Failed = 3840,//请求或返回不是纯Json格式
};
@end
@implementation AFNetworkRequest
/**
* 请求失败回调方法
*
* @param error 错误对象
*/
+ (void)requestFailed:(NSError *)error{
// //停止动画效果
// [[LoadingView shareInstance]stopAnimating];
XLog(@"--------------\n%zd %@",error.code, error.debugDescription);
switch (error.code) {
case AFNetworkErrorType_NoNetwork :
ALERT_SHOW(@"网络链接失败,请检查网络。");
break;
case AFNetworkErrorType_TimedOut :
ALERT_SHOW(@"访问服务器超时,请检查网络。");
break;
case AFNetworkErrorType_3840Failed :
ALERT_SHOW(@"服务器报错了,请稍后再访问。");
break;
default:
ALERT_SHOW(@"网络链接失败");
break;
}
}
/**
* AFNetworking请求方法
*
* @param method 请求方式 Request_POST / Request_GET / Request_PUT / Request_PATCH / Request_DELETE
* @param parameters 请求参数
* @param url 请求url字符串
* @param success 请求成功回调block
*/
+ (void)AFNetworkRequestWithRequestMethod:(RequestMethod)method
parameters:(NSMutableDictionary *)parameters
url:(NSString *)url
success:(void (^)(NSDictionary *dict))success
failure:(void (^)(NSError *error))failure{
// //提示信息
// [MBProgressHUD showMessageWithoutBackground:@"请稍候" toView:nil];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 30.0f;//超时时间
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript", nil];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// WEAKSELF
// [[LoadingView shareInstance]startAnimating];
switch (method) {
//POST 方法
case Request_POST:{
[manager POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
XLog(@"uploadProgress __ %@ __ ",uploadProgress);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功的操作
if (success) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];
if(dict){
success(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败的处理
[AFNetworkRequest requestFailed:error];
if(failure){
failure(error);
}
}];
} break;
//GET 方法
case Request_GET:{
[manager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功的操作
if (success) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];
if(dict){
success(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败的处理
[AFNetworkRequest requestFailed:error];
if(failure){
failure(error);
}
}];
} break;
//PUT 方法
case Request_PUT:{
[manager PUT:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功的操作
if (success) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];
if(dict){
success(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败的处理
[AFNetworkRequest requestFailed:error];
if(failure){
failure(error);
}
}];
} break;
//PATCH 方法
case Request_PATCH:{
[manager PATCH:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功的操作
if (success) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];
if(dict){
success(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败的处理
[AFNetworkRequest requestFailed:error];
if(failure){
failure(error);
}
}];
} break;
//DELETE 方法
case Request_DELETE:{
[manager DELETE:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功的操作
if (success) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];
if(dict){
success(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败的处理
[AFNetworkRequest requestFailed:error];
if(failure){
failure(error);
}
}];
} break;
default:
break;
}
}
网友评论