ASIHTTPRequest的使用——ASIFormDataRequest(自定义封装类)

使用第三方网络请求ASIHTTPRequest中的ASIFormDataRequest进行网络请求,包括上传,下载。

使用代码块模式,用户可自定义请求模式,即GET,或POST。同时可根据请求参数中是否包含文件,而进行文件的上传处理。


实现代码如下


.h文件

#import <Foundation/Foundation.h>
#import "ASIFormDataRequest.h"

/****************************************************************/

//文件信息
@interface FileModal :NSObject

@property (nonatomic,strong)NSString *fileName;//文件名称
@property (nonatomic,strong)NSString *filePath;//文件路径

@end

/****************************************************************/


@interface NetRequest :NSObject

/// 单例
+ (NetRequest *)shareManager;

///发送请求(成功,失败)
- (ASIFormDataRequest *)requestWithUrl:(NSString *)urlString
                             parameter:(NSDictionary *)parameter
                           didFinished:(void (^)(id obj))finishedBlock
                             didFailed:(void (^)(NSError *error))failedBlock;

@end


.m文件

#import "NetRequest.h"

/****************************************************************/

//文件信息
@implementation FileModal

@end

/****************************************************************/


@implementation NetRequest

+ (NetRequest *)shareManager
{
    staticNetRequest *requestShare;
    staticdispatch_once_t once;
    dispatch_once(&once, ^{
        requestShare = [[selfalloc]init];
    });
    
    return requestShare;
}

///发送请求(成功,失败)
- (ASIFormDataRequest *)requestWithUrl:(NSString *)urlString
                             parameter:(NSDictionary *)parameter
                           didFinished:(void (^)(id obj))finishedBlock
                             didFailed:(void (^)(NSError *error))failedBlock
{
    if (!urlString ||0 >= urlString.length)
    {
        returnnil;
    }
    
    // 创建请求 __block在非ARC下时使用,而ARC下则用__weak
    NSURL *url = [NSURLURLWithString:urlString];
    __weakASIFormDataRequest *request = [ASIFormDataRequestrequestWithURL:url];
    
   //设置请求模式,根据有无参数情况
    NSString *requestMethod = (!parameter ?@"GET" :@"POST");
    request.requestMethod = requestMethod;
    // 设置请求超时
    request.timeOutSeconds =30.0;
    
    // 参数设置
    for (NSString *keyin parameter.allKeys)
    {
        id valueObj = [parameterobjectForKey:key];
        if ([valueObjisKindOfClass:[FileModalclass]])
        {
            // 上传文件
            FileModal *fileModal = (FileModal *)valueObj;
            NSString *filePath = fileModal.filePath;
            NSString *fileName = [filePathsubstringFromIndex:[filePathrangeOfString:@"/"options:NSBackwardsSearch].location +1];
            [request setFile:filePathwithFileName:fileNameandContentType:@"multipart/form-data"forKey:key];
        }
        else
        {
            [request setPostValue:valueObjforKey:key];
        }

    }
    
    // 设置请求成功时
    [request setCompletionBlock:^{
#if NS_BLOCKS_AVAILABLE
        if (finishedBlock)
        {
            NSData *data = [requestresponseData];
            NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragmentserror:nil];
   
            finishedBlock(dict);
        }
#endif
    }];
    
    // 设置请求失败时
    [request setFailedBlock:^{
#if NS_BLOCKS_AVAILABLE
        if (failedBlock)
        {
            NSError *error = request.error;
            failedBlock(error);
        }
#endif
    }];
    
    // 发送异步请求
    [request startAsynchronous];
    
    return request;
}

@end

使用

1 导入头文件

#import "NetRequest.h"

2 使用

注意内存管理,即相互引用

__weak 当前类名称 weakSelf = self;
[[NetRequestshareManager]requestWithUrl:nilparameter:nildidFinished:^(id obj) {
        // 请求完成
    } didFailed:^(NSError *error) {
        // 请求失败
}];






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值