1

我正在尝试复制可以在浏览器中执行的 HTTP POST。我无法使用 C#/WebRequest 让它工作。

当我调用 URL 时,我在 Fiddler 中收到“ 302 Found ”响应,在我看来,我发布的数据无效。

我试图复制的 HTTP 帖子具有以下内容(Fiddler 中的 TextView):

------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="__EVENTTARGET"

ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$btnSend
------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="__EVENTARGUMENT"


------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="__VIEWSTATE"

/wEPDwULLTE3NTkzNDk2NjAPFgIeE1ZhbGlkYXRlUmVxdWVzdE1vZGUCARYCZg9kFgJmD2QWAmYPZBYCZg9kFgICAQ9kFgICAw8WAh4Fc3R5bGUFEnBvc2l0aW9uOnJlbGF0aXZlOxYCAgEPZBYEAgEPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGEWCAIBD2QWAgIHD2QWAgIDD2QWCAIDDw8WAh4HVmlzaWJsZWhkZAIFDw8WAh4ITWFpbEd1aWQoKVhTeXN0ZW0uR3VpZCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5JDI2Y2UwMjI2LTM1NDctNDY0MC05Y2UyLTkzZDNkMTcwZjU0Y2QWBgIBD2QWAmYPZBYOAgEPDxYCHgtOYXZpZ2F0ZVVybAUYL3Byb2ZpbC80MTA4MzQ4L0JldHRpbmFqZBYCZg8PFgIeBFRleHQFEUJldHRpbmFfaiwgMjQgw6VyZGQCAw9kFgJmDw8WAh4NQWx0ZXJuYXRlVGV4dGUWAh4KZ2FsbGVyeWltZwUCbm9kAgUPD2QWAh8BBSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjNweDtyaWdodDoyMTVweDtkAgcPDxYEHwYFDlNlbmQgZW4gYmVza2VkHwUFDGphdmFzY3JpcHQ6OxYEHgdvbmNsaWNrBVNTaG93TmV3TW9kYWwoJ2NwaENvbnRlbnRfY3BoTWFpbl9jcGhNYWluX3VzZXJJbmZvX1NlbmROZXdNYWlsUG9wdXAnKTtGaXhDS0VkaXRvcigpOx8BBQpyaWdodDo5cHg7ZAIJDw8WAh8DaGRkAgsPDxYCHwNoZGQCDQ8PFgIfA2hkZAICD2QWAgIBD2QWAgIBD2QWAgIBD2QWAmYPZBYcAgEPFgIfBgU2U2tyaXYgYmVza2VkIHRpbCA8c3BhbiBjbGFzcz0iZmVtYWxlIj5CZXR0aW5hX2o8L3NwYW4+ZAIFDw8WAh8DaGRkAgcPDxYCHwNoZGQCCQ9kFgoCAQ8PZBYCHglvbmtleWRvd25kZAIFD2QWAmYPDxYEHgZIZWlnaHQbAAAAAADAYkABAAAAHgRfIVNCAoABZGQCBw8PFgQeCENzc0NsYXNzBStzZW5kTWFpbCBkYXRpbmdCdXR0b25HcmVlbjMwIGRhdGluZ0J1dHRvbjMwHwwCAmRkAgkPFgIfCQVAc3dhcFZpc2liaWxpdHkoJ2NwaENvbnRlbnRfY3BoTWFpbl9jcGhNYWluX3VzZXJJbmZvX2FkZEltYWdlcycpOxYCAgEPDxYCHwdlFgIfCAUCbm9kAgsPZBYEAgEPZBYEAgEPFgIfA2hkAgMPDxYEHw0FImRhdGluZ0J1dHRvbkdyZWVuMjIgZGF0aW5nQnV0dG9uMjIfDAICZGQCAw88KwAJAGQCCw8PFgQeCEltYWdlVXJsBWxodHRwOi8vbWVkaWEuZGF0aW5nLmRrL1VzZXJzLzRjZWUwMWM1LWI1MjgtNGI3Ny1iOTkwLTdjYTc4MWQxOTZiZi9QaG90b3MvNjM1MTQ4NzkwNjE2MjkyMDkxX1dlYlRodW1ibmFpbC5qcGcfB2UWAh8IBQJub2QCDQ8PFgYfBgUJQmV0dGluYV9qHw0FBmZlbWFsZR8MAgJkZAIPDxYCHwYFBkt2aW5kZWQCEQ8WAh8GBQIyNGQCEw8WAh8GBRlCb3IgaSA8Yj5WZWpsZTwvYj4gKDcxMDApZAIVDw8WAh8DaGQWAgIBDxYCHwZlZAIXDw8WBh8GBQlCZXR0aW5hX2ofDQUGZmVtYWxlHwwCAmRkAhkPFgIfBgUEZGF0ZWQCGw9kFgICAQ8WAh8GBQptaW4gcmVnaW9uZAIdD2QWBAIBDxYCHwYFAjI0ZAIDDxYCHwYFAjMxZAIDD2QWAmYPZBYCAgEPZBYCAgEPZBYCAgEPZBYCZg9kFhoCAQ8PFgYfBgUJQmV0dGluYV9qHw0FBmZlbWFsZR8MAgJkZAIDD2QWAgIBDw8WBh8GBQlCZXR0aW5hX2ofDQUGZmVtYWxlHwwCAmRkAgUPZBYEAgEPDxYGHwYFCUJldHRpbmFfah8NBQZmZW1hbGUfDAICZGQCAw8WAh8GBQNodW5kAgcPZBYCAgEPDxYGHwYFCUJldHRpbmFfah8NBQZmZW1hbGUfDAICZGQCCQ8PFgIfDgVsaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy80Y2VlMDFjNS1iNTI4LTRiNzctYjk5MC03Y2E3ODFkMTk2YmYvUGhvdG9zLzYzNTE0ODc5MDYxNjI5MjA5MV9XZWJUaHVtYm5haWwuanBnZGQCCw8PFgYfBgUJQmV0dGluYV9qHw0FBmZlbWFsZR8MAgJkZAINDxYCHwYFBkt2aW5kZWQCDw8WAh8GBQIyNGQCEQ8WAh8GBRlCb3IgaSA8Yj5WZWpsZTwvYj4gKDcxMDApZAITDw8WBh8GBQlCZXR0aW5hX2ofDQUGZmVtYWxlHwwCAmRkAhUPFgIfBgUEZGF0ZWQCFw9kFgICAQ8WAh8GBQptaW4gcmVnaW9uZAIZD2QWBAIBDxYCHwYFAjI0ZAIDDxYCHwYFAjMxZAIHD2QWAgIBD2QWAgIBD2QWAgIBD2QWAgIBD2QWAgIBD2QWAgIBD2QWAmYPZBYCAgMPEGRkFgBkAgkPZBYSAgEPZBYCAgEPZBYCAgEPZBYSAgEPDxYCHwdlFgIfCAUCbm9kAgMPDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAgUPDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAgcPDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAgkPDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAgsPDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAg0PDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAg8PDxYGHw0FB2lzTWF0Y2gfB2UfDAICFgIfCAUCbm9kAhEPDxYEHw4FJS9HcmFwaGljcy9Vc2VyUGFnZXMvbWF0Y2gvd2hlZWwvNy5wbmcfB2UWAh8IBQJub2QCAw9kFgICAQ9kFgICAQ9kFgICAQ8WAh4LXyFJdGVtQ291bnQCAxYGZg9kFgICAQ8PFgQfDQUvY3JvcHBlZEltYWdlQ29udGFpbmVyIGNyb3BwZWRJbWFnZUNvbnRhaW5lckhpZ2gfDAICZBYCAgEPDxYEHw4FcGh0dHA6Ly9tZWRpYS5kYXRpbmcuZGsvVXNlcnMvNGNlZTAxYzUtYjUyOC00Yjc3LWI5OTAtN2NhNzgxZDE5NmJmL1Bob3Rvcy85NzIzMjcvNjM1MTQ4Nzk3NjcyNTEyODE0X1dlYk5vcm1hbC5qcGcfB2UWBB8BBQp0b3A6LTIzcHg7HwgFAm5vZAIBD2QWAgIBDw8WBB8NBS9jcm9wcGVkSW1hZ2VDb250YWluZXIgY3JvcHBlZEltYWdlQ29udGFpbmVySGlnaB8MAgJkFgICAQ8PFgQfDgVwaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy80Y2VlMDFjNS1iNTI4LTRiNzctYjk5MC03Y2E3ODFkMTk2YmYvUGhvdG9zLzk3MjMyNy82MzUxNDg3OTQ3NDc2OTQzMDlfV2ViTm9ybWFsLmpwZx8HZRYEHwEFCnRvcDotMjNweDsfCAUCbm9kAgIPZBYCAgEPDxYEHw0FL2Nyb3BwZWRJbWFnZUNvbnRhaW5lciBjcm9wcGVkSW1hZ2VDb250YWluZXJIaWdoHwwCAmQWAgIBDw8WBB8OBXBodHRwOi8vbWVkaWEuZGF0aW5nLmRrL1VzZXJzLzRjZWUwMWM1LWI1MjgtNGI3Ny1iOTkwLTdjYTc4MWQxOTZiZi9QaG90b3MvOTcyMzI3LzYzNTE0ODc5NDU2NTc0NDI4Ml9XZWJOb3JtYWwuanBnHwdlFgQfAQUKdG9wOi0yM3B4Ox8IBQJub2QCBQ9kFgQCAQ8WAh8DaGQCBQ8WAh8DaBYCAgEPDxYCHwNoZGQCBw8PFgIfA2dkZAILDw8WAh8DaGQWAmYPZBYCAgEPFgIfDwL/////D2QCDQ8PFgIfA2hkZAIPD2QWAmYPZBYCAgEPZBYGAgEPDxYCHwUFGy9rb250cm9scGFuZWwvcHJvZmlsYmlsbGVkZWRkAgMPDxYCHwUFFy9rb250cm9scGFuZWwvZm90b2FsYnVtZGQCBQ8PFgIfBQUYL2tvbnRyb2xwYW5lbC9wcm9maWxpbmZvZGQCEQ8WAh8DaBYCZg9kFgICAQ8PFgIfA2hkZAITD2QWBgIBDw8WAh8FBV9+L1VJL0Zvcm1zL1VzZXJzL1NhbGVzL1B1cmNoYXNlL0Nob29zZVByb2R1Y3RHcm91cC5hc3B4P1Byb2R1Y3RHcm91cElEPTEmZ3c9OCZnd3RyaWdnZXI9NDEwODM0OGRkAgMPDxYCHwUFX34vVUkvRm9ybXMvVXNlcnMvU2FsZXMvUHVyY2hhc2UvQ2hvb3NlUHJvZHVjdEdyb3VwLmFzcHg/UHJvZHVjdEdyb3VwSUQ9MSZndz04Jmd3dHJpZ2dlcj00MTA4MzQ4ZGQCBQ8PFgIfBQVffi9VSS9Gb3Jtcy9Vc2Vycy9TYWxlcy9QdXJjaGFzZS9DaG9vc2VQcm9kdWN0R3JvdXAuYXNweD9Qcm9kdWN0R3JvdXBJRD0xJmd3PTgmZ3d0cmlnZ2VyPTQxMDgzNDhkZAIHD2QWBgIFDw8WAh8FBQ0vZmF2b3JpdGxpc3RlZGQCCQ8PFgIfBQUML29ubGluZWxpc3RlZGQCDw9kFgICAQ8PFgIfA2dkFgICAw8WAh4EaHJlZgUsamF2YXNjcmlwdDpkb1NlYXJjaCgnY3BoQ29udGVudF9kdGJTZWFyY2gnKTtkAg8PFgIfA2dkAhEPFgIfA2dkAgUPDxYCHwNnZGQYAQVIY3RsMDAkY3RsMDAkY3RsMDAkY3RsMDAkY3BoQ29udGVudCRjcGhNYWluJGNwaE1haW4kY3BoTWFpbiRTaG93SW50ZXJlc3QxDxQrAAJkArzg+gFk
------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="__EVENTVALIDATION"

/wEdAAx95zPpe2BlbkSPtSjnJkeSqvYfpfS3XNXzjmCqwTcmLQjHP/vbZXJQPtJKH09iDnpjSbMVDuj6latN4D+WJQ0GCMex73PUPLDd7cpHB4eUSvZX/tYXeQmcSauQTEcfDN4gzLbTMorrzQbwiAG5eIHPlTUVcvEvYPdgk6jbJTrWAjYX1hFGBRb9pN45cUrARCzIG4TG+xGWOKHjJPrtLGHRsD92s0QQ5wfKXLUKe9jk89T+K49gmSvDB5JCjlvQU0Q=
------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfRemoveFavoritID"


------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfAddFilterID"

4108348
------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfRemoveFilterID"


------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$tbSubject"

Test
------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$ceMessage$CkEditor1"

Test123
------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$MultiUpload$fuFallbackGalleryImageUpload"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryTbZqL4CZcQwC7K58--

到目前为止,我已经构建了以下 TextView:

------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="__EVENTTARGET""

ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$btnSend
------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="__EVENTARGUMENT""


------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="__VIEWSTATE""

/wEPDwULLTE3NTkzNDk2NjAPFgIeE1ZhbGlkYXRlUmVxdWVzdE1vZGUCARYCZg9kFgJmD2QWAmYPZBYCZg9kFgICAQ9kFgICAw8WAh4Fc3R5bGUFEnBvc2l0aW9uOnJlbGF0aXZlOxYCAgEPZBYEAgEPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGEWCAIBD2QWAgIHD2QWAgIDD2QWCAIDDw8WAh4HVmlzaWJsZWhkZAIFDw8WAh4ITWFpbEd1aWQoKVhTeXN0ZW0uR3VpZCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5JDEwNGVkZjRmLTM4MTktNDc2Yi04ZDY4LTQ3OTc1ZmNjYzhhZmQWBgIBD2QWAmYPZBYOAgEPDxYCHgtOYXZpZ2F0ZVVybAUZL3Byb2ZpbC80MTA3MTk3L1Jpc3Nrb3Y5MGQWAmYPDxYCHgRUZXh0BRFSaXNza292OTAsIDIzIMOlcmRkAgMPZBYCZg8PFgIeDUFsdGVybmF0ZVRleHRlFgIeCmdhbGxlcnlpbWcFAm5vZAIFDw9kFgIfAQUncG9zaXRpb246YWJzb2x1dGU7dG9wOjIzcHg7cmlnaHQ6MjE1cHg7ZAIHDw8WBB8GBQ5TZW5kIGVuIGJlc2tlZB8FBQxqYXZhc2NyaXB0OjsWBB4Hb25jbGljawVTU2hvd05ld01vZGFsKCdjcGhDb250ZW50X2NwaE1haW5fY3BoTWFpbl91c2VySW5mb19TZW5kTmV3TWFpbFBvcHVwJyk7Rml4Q0tFZGl0b3IoKTsfAQUKcmlnaHQ6OXB4O2QCCQ8PFgIfA2hkZAILDw8WAh8DaGRkAg0PDxYCHwNoZGQCAg9kFgICAQ9kFgICAQ9kFgICAQ9kFgJmD2QWHAIBDxYCHwYFNlNrcml2IGJlc2tlZCB0aWwgPHNwYW4gY2xhc3M9ImZlbWFsZSI+Umlzc2tvdjkwPC9zcGFuPmQCBQ8PFgIfA2hkZAIHDw8WAh8DaGRkAgkPZBYKAgEPD2QWAh4Jb25rZXlkb3duZGQCBQ9kFgJmDw8WBB4GSGVpZ2h0GwAAAAAAwGJAAQAAAB4EXyFTQgKAAWRkAgcPDxYEHghDc3NDbGFzcwUrc2VuZE1haWwgZGF0aW5nQnV0dG9uR3JlZW4zMCBkYXRpbmdCdXR0b24zMB8MAgJkZAIJDxYCHwkFQHN3YXBWaXNpYmlsaXR5KCdjcGhDb250ZW50X2NwaE1haW5fY3BoTWFpbl91c2VySW5mb19hZGRJbWFnZXMnKTsWAgIBDw8WAh8HZRYCHwgFAm5vZAILD2QWBAIBD2QWBAIBDxYCHwNoZAIDDw8WBB8NBSJkYXRpbmdCdXR0b25HcmVlbjIyIGRhdGluZ0J1dHRvbjIyHwwCAmRkAgMPPCsACQBkAgsPDxYEHghJbWFnZVVybAVsaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy82M2U5N2U2Mi0xM2JhLTQ4OTgtOTczZC0yYjI1NjhjMjBhMzIvUGhvdG9zLzYzNTE0MzYxMzk1MzI5OTMzMF9XZWJUaHVtYm5haWwuanBnHwdlFgIfCAUCbm9kAg0PDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCDw8WAh8GBQZLdmluZGVkAhEPFgIfBgUCMjNkAhMPFgIfBgUbQm9yIGkgPGI+Umlzc2tvdjwvYj4gKDgyNDApZAIVDw8WAh8DaGQWAgIBDxYCHwZlZAIXDw8WBh8GBQlSaXNza292OTAfDQUGZmVtYWxlHwwCAmRkAhkPFgIfBgUIa8OmcmVzdGVkAhsPZBYCAgEPFgIfBgUPbWl0IG7DpnJvbXLDpWRlZAIdD2QWBAIBDxYCHwYFAjIzZAIDDxYCHwYFAjI5ZAIDD2QWAmYPZBYCAgEPZBYCAgEPZBYCAgEPZBYCZg9kFhoCAQ8PFgYfBgUJUmlzc2tvdjkwHw0FBmZlbWFsZR8MAgJkZAIDD2QWAgIBDw8WBh8GBQlSaXNza292OTAfDQUGZmVtYWxlHwwCAmRkAgUPZBYEAgEPDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCAw8WAh8GBQNodW5kAgcPZBYCAgEPDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCCQ8PFgIfDgVsaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy82M2U5N2U2Mi0xM2JhLTQ4OTgtOTczZC0yYjI1NjhjMjBhMzIvUGhvdG9zLzYzNTE0MzYxMzk1MzI5OTMzMF9XZWJUaHVtYm5haWwuanBnZGQCCw8PFgYfBgUJUmlzc2tvdjkwHw0FBmZlbWFsZR8MAgJkZAINDxYCHwYFBkt2aW5kZWQCDw8WAh8GBQIyM2QCEQ8WAh8GBRtCb3IgaSA8Yj5SaXNza292PC9iPiAoODI0MClkAhMPDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCFQ8WAh8GBQhrw6ZyZXN0ZWQCFw9kFgICAQ8WAh8GBQ9taXQgbsOmcm9tcsOlZGVkAhkPZBYEAgEPFgIfBgUCMjNkAgMPFgIfBgUCMjlkAgcPZBYCAgEPZBYCAgEPZBYCAgEPZBYCAgEPZBYCAgEPZBYCAgEPZBYCZg9kFgICAw8QZGQWAGQCCQ9kFhACAQ9kFgICAQ9kFgICAQ9kFhICAQ8PFgIfB2UWAh8IBQJub2QCAw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCBQ8PFgIfB2UWAh8IBQJub2QCBw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCCQ8PFgIfB2UWAh8IBQJub2QCCw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCDQ8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCDw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCEQ8PFgQfDgUlL0dyYXBoaWNzL1VzZXJQYWdlcy9tYXRjaC93aGVlbC81LnBuZx8HZRYCHwgFAm5vZAIDD2QWAgIBD2QWAgIBD2QWAgIBDxYCHgtfIUl0ZW1Db3VudAIBFgJmD2QWAgIBDw8WBB8NBS9jcm9wcGVkSW1hZ2VDb250YWluZXIgY3JvcHBlZEltYWdlQ29udGFpbmVySGlnaB8MAgJkFgICAQ8PFgQfDgVwaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy82M2U5N2U2Mi0xM2JhLTQ4OTgtOTczZC0yYjI1NjhjMjBhMzIvUGhvdG9zLzk3MDQ2MC82MzUxNDM2NDA3MjE1NzY0NTFfV2ViTm9ybWFsLmpwZx8HZRYEHwEFCXRvcDotN3B4Ox8IBQJub2QCBQ9kFgQCAQ8WAh8DaGQCBQ8WAh8DaBYCAgEPDxYCHwNoZGQCCw8PFgIfA2hkFgJmD2QWAgIBDxYCHw8C/////w9kAg0PDxYCHwNoZGQCDw9kFgJmD2QWAgIBD2QWBgIBDw8WAh8FBRsva29udHJvbHBhbmVsL3Byb2ZpbGJpbGxlZGVkZAIDDw8WAh8FBRcva29udHJvbHBhbmVsL2ZvdG9hbGJ1bWRkAgUPDxYCHwUFGC9rb250cm9scGFuZWwvcHJvZmlsaW5mb2RkAhEPFgIfA2gWAmYPZBYCAgEPDxYCHwNoZGQCEw9kFgYCAQ8PFgIfBQVffi9VSS9Gb3Jtcy9Vc2Vycy9TYWxlcy9QdXJjaGFzZS9DaG9vc2VQcm9kdWN0R3JvdXAuYXNweD9Qcm9kdWN0R3JvdXBJRD0xJmd3PTgmZ3d0cmlnZ2VyPTQxMDcxOTdkZAIDDw8WAh8FBV9+L1VJL0Zvcm1zL1VzZXJzL1NhbGVzL1B1cmNoYXNlL0Nob29zZVByb2R1Y3RHcm91cC5hc3B4P1Byb2R1Y3RH
------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="__EVENTVALIDATION""

/wEdAAx3p75HULRe2VjfDQjIZMUyqvYfpfS3XNXzjmCqwTcmLQjHP/vbZXJQPtJKH09iDnpjSbMVDuj6latN4D+WJQ0GCMex73PUPLDd7cpHB4eUSvZX/tYXeQmcSauQTEcfDN4gzLbTMorrzQbwiAG5eIHPlTUVcvEvYPdgk6jbJTrWAjYX1hFGBRb9pN45cUrARCzIG4TG+xGWOKHjJPrtLGHRsD92s0QQ5wfKXLUKe9jk89T+K49gmSvDB5JCjlvQU0Q=
------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfRemoveFavoritID""


------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfAddFilterID""

4108031
------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfRemoveFilterID""


------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$tbSubject""

Hej :)
------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$MultiUpload$fuFallbackGalleryImageUpload""

filename=
------------63f74b64334e4c8fad891bd1f969402b--

我如何建立这个帖子?

我一直在使用本指南中的提示(FormUpload 答案)。我发布的数据是这样制作的:

var namValCollection = new Dictionary<string,string>();
    namValCollection.Add("Content-Disposition: form-data; name=\"__EVENTTARGET\"", "ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$btnSend");
    namValCollection.Add("Content-Disposition: form-data; name=\"__EVENTARGUMENT\"", string.Empty);
    namValCollection.Add("Content-Disposition: form-data; name=\"__VIEWSTATE\"", "/wEPDwULLTE3NTkzNDk2NjAPFgIeE1ZhbGlkYXRlUmVxdWVzdE1vZGUCARYCZg9kFgJmD2QWAmYPZBYCZg9kFgICAQ9kFgICAw8WAh4Fc3R5bGUFEnBvc2l0aW9uOnJlbGF0aXZlOxYCAgEPZBYEAgEPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGEWCAIBD2QWAgIHD2QWAgIDD2QWCAIDDw8WAh4HVmlzaWJsZWhkZAIFDw8WAh4ITWFpbEd1aWQoKVhTeXN0ZW0uR3VpZCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5JDEwNGVkZjRmLTM4MTktNDc2Yi04ZDY4LTQ3OTc1ZmNjYzhhZmQWBgIBD2QWAmYPZBYOAgEPDxYCHgtOYXZpZ2F0ZVVybAUZL3Byb2ZpbC80MTA3MTk3L1Jpc3Nrb3Y5MGQWAmYPDxYCHgRUZXh0BRFSaXNza292OTAsIDIzIMOlcmRkAgMPZBYCZg8PFgIeDUFsdGVybmF0ZVRleHRlFgIeCmdhbGxlcnlpbWcFAm5vZAIFDw9kFgIfAQUncG9zaXRpb246YWJzb2x1dGU7dG9wOjIzcHg7cmlnaHQ6MjE1cHg7ZAIHDw8WBB8GBQ5TZW5kIGVuIGJlc2tlZB8FBQxqYXZhc2NyaXB0OjsWBB4Hb25jbGljawVTU2hvd05ld01vZGFsKCdjcGhDb250ZW50X2NwaE1haW5fY3BoTWFpbl91c2VySW5mb19TZW5kTmV3TWFpbFBvcHVwJyk7Rml4Q0tFZGl0b3IoKTsfAQUKcmlnaHQ6OXB4O2QCCQ8PFgIfA2hkZAILDw8WAh8DaGRkAg0PDxYCHwNoZGQCAg9kFgICAQ9kFgICAQ9kFgICAQ9kFgJmD2QWHAIBDxYCHwYFNlNrcml2IGJlc2tlZCB0aWwgPHNwYW4gY2xhc3M9ImZlbWFsZSI+Umlzc2tvdjkwPC9zcGFuPmQCBQ8PFgIfA2hkZAIHDw8WAh8DaGRkAgkPZBYKAgEPD2QWAh4Jb25rZXlkb3duZGQCBQ9kFgJmDw8WBB4GSGVpZ2h0GwAAAAAAwGJAAQAAAB4EXyFTQgKAAWRkAgcPDxYEHghDc3NDbGFzcwUrc2VuZE1haWwgZGF0aW5nQnV0dG9uR3JlZW4zMCBkYXRpbmdCdXR0b24zMB8MAgJkZAIJDxYCHwkFQHN3YXBWaXNpYmlsaXR5KCdjcGhDb250ZW50X2NwaE1haW5fY3BoTWFpbl91c2VySW5mb19hZGRJbWFnZXMnKTsWAgIBDw8WAh8HZRYCHwgFAm5vZAILD2QWBAIBD2QWBAIBDxYCHwNoZAIDDw8WBB8NBSJkYXRpbmdCdXR0b25HcmVlbjIyIGRhdGluZ0J1dHRvbjIyHwwCAmRkAgMPPCsACQBkAgsPDxYEHghJbWFnZVVybAVsaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy82M2U5N2U2Mi0xM2JhLTQ4OTgtOTczZC0yYjI1NjhjMjBhMzIvUGhvdG9zLzYzNTE0MzYxMzk1MzI5OTMzMF9XZWJUaHVtYm5haWwuanBnHwdlFgIfCAUCbm9kAg0PDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCDw8WAh8GBQZLdmluZGVkAhEPFgIfBgUCMjNkAhMPFgIfBgUbQm9yIGkgPGI+Umlzc2tvdjwvYj4gKDgyNDApZAIVDw8WAh8DaGQWAgIBDxYCHwZlZAIXDw8WBh8GBQlSaXNza292OTAfDQUGZmVtYWxlHwwCAmRkAhkPFgIfBgUIa8OmcmVzdGVkAhsPZBYCAgEPFgIfBgUPbWl0IG7DpnJvbXLDpWRlZAIdD2QWBAIBDxYCHwYFAjIzZAIDDxYCHwYFAjI5ZAIDD2QWAmYPZBYCAgEPZBYCAgEPZBYCAgEPZBYCZg9kFhoCAQ8PFgYfBgUJUmlzc2tvdjkwHw0FBmZlbWFsZR8MAgJkZAIDD2QWAgIBDw8WBh8GBQlSaXNza292OTAfDQUGZmVtYWxlHwwCAmRkAgUPZBYEAgEPDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCAw8WAh8GBQNodW5kAgcPZBYCAgEPDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCCQ8PFgIfDgVsaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy82M2U5N2U2Mi0xM2JhLTQ4OTgtOTczZC0yYjI1NjhjMjBhMzIvUGhvdG9zLzYzNTE0MzYxMzk1MzI5OTMzMF9XZWJUaHVtYm5haWwuanBnZGQCCw8PFgYfBgUJUmlzc2tvdjkwHw0FBmZlbWFsZR8MAgJkZAINDxYCHwYFBkt2aW5kZWQCDw8WAh8GBQIyM2QCEQ8WAh8GBRtCb3IgaSA8Yj5SaXNza292PC9iPiAoODI0MClkAhMPDxYGHwYFCVJpc3Nrb3Y5MB8NBQZmZW1hbGUfDAICZGQCFQ8WAh8GBQhrw6ZyZXN0ZWQCFw9kFgICAQ8WAh8GBQ9taXQgbsOmcm9tcsOlZGVkAhkPZBYEAgEPFgIfBgUCMjNkAgMPFgIfBgUCMjlkAgcPZBYCAgEPZBYCAgEPZBYCAgEPZBYCAgEPZBYCAgEPZBYCAgEPZBYCZg9kFgICAw8QZGQWAGQCCQ9kFhACAQ9kFgICAQ9kFgICAQ9kFhICAQ8PFgIfB2UWAh8IBQJub2QCAw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCBQ8PFgIfB2UWAh8IBQJub2QCBw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCCQ8PFgIfB2UWAh8IBQJub2QCCw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCDQ8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCDw8PFgYfDQUHaXNNYXRjaB8HZR8MAgIWAh8IBQJub2QCEQ8PFgQfDgUlL0dyYXBoaWNzL1VzZXJQYWdlcy9tYXRjaC93aGVlbC81LnBuZx8HZRYCHwgFAm5vZAIDD2QWAgIBD2QWAgIBD2QWAgIBDxYCHgtfIUl0ZW1Db3VudAIBFgJmD2QWAgIBDw8WBB8NBS9jcm9wcGVkSW1hZ2VDb250YWluZXIgY3JvcHBlZEltYWdlQ29udGFpbmVySGlnaB8MAgJkFgICAQ8PFgQfDgVwaHR0cDovL21lZGlhLmRhdGluZy5kay9Vc2Vycy82M2U5N2U2Mi0xM2JhLTQ4OTgtOTczZC0yYjI1NjhjMjBhMzIvUGhvdG9zLzk3MDQ2MC82MzUxNDM2NDA3MjE1NzY0NTFfV2ViTm9ybWFsLmpwZx8HZRYEHwEFCXRvcDotN3B4Ox8IBQJub2QCBQ9kFgQCAQ8WAh8DaGQCBQ8WAh8DaBYCAgEPDxYCHwNoZGQCCw8PFgIfA2hkFgJmD2QWAgIBDxYCHw8C/////w9kAg0PDxYCHwNoZGQCDw9kFgJmD2QWAgIBD2QWBgIBDw8WAh8FBRsva29udHJvbHBhbmVsL3Byb2ZpbGJpbGxlZGVkZAIDDw8WAh8FBRcva29udHJvbHBhbmVsL2ZvdG9hbGJ1bWRkAgUPDxYCHwUFGC9rb250cm9scGFuZWwvcHJvZmlsaW5mb2RkAhEPFgIfA2gWAmYPZBYCAgEPDxYCHwNoZGQCEw9kFgYCAQ8PFgIfBQVffi9VSS9Gb3Jtcy9Vc2Vycy9TYWxlcy9QdXJjaGFzZS9DaG9vc2VQcm9kdWN0R3JvdXAuYXNweD9Qcm9kdWN0R3JvdXBJRD0xJmd3PTgmZ3d0cmlnZ2VyPTQxMDcxOTdkZAIDDw8WAh8FBV9+L1VJL0Zvcm1zL1VzZXJzL1NhbGVzL1B1cmNoYXNlL0Nob29zZVByb2R1Y3RHcm91cC5hc3B4P1Byb2R1Y3RH");
    namValCollection.Add("Content-Disposition: form-data; name=\"__EVENTVALIDATION\"", "/wEdAAx3p75HULRe2VjfDQjIZMUyqvYfpfS3XNXzjmCqwTcmLQjHP/vbZXJQPtJKH09iDnpjSbMVDuj6latN4D+WJQ0GCMex73PUPLDd7cpHB4eUSvZX/tYXeQmcSauQTEcfDN4gzLbTMorrzQbwiAG5eIHPlTUVcvEvYPdgk6jbJTrWAjYX1hFGBRb9pN45cUrARCzIG4TG+xGWOKHjJPrtLGHRsD92s0QQ5wfKXLUKe9jk89T+K49gmSvDB5JCjlvQU0Q=");
    namValCollection.Add("Content-Disposition: form-data; name=\"ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfRemoveFavoritID\"", string.Empty);
    namValCollection.Add("Content-Disposition: form-data; name=\"ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfAddFilterID\"", messages.Profile.ProfileId);
    namValCollection.Add("Content-Disposition: form-data; name=\"ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphLeftMenu$hfRemoveFilterID\"", string.Empty);
    namValCollection.Add("Content-Disposition: form-data; name=\"ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$tbSubject\"", messages.Subect);
    namValCollection.Add("Content-Disposition: form-data; name=\"ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$MultiUpload$fuFallbackGalleryImageUpload\"", "filename=");


    container.Add(new Cookie("DBED", "1") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });
    container.Add(new Cookie("specialoffer", "1") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });
    container.Add(new Cookie(".asdsad1024Auth", "3AE78C55993A13AC7374E51D91F6601408C151D0BD795DFAC41E056A737B858EE487C1F673925A1CA485AB0579C0E7EB3589C3036DAB9B549972904C6A7DBD480CsdE61E571F273B21B8861D5690ED7469815C8D4CD7EA68494D07FCD5054929432CF6093771D811A0F0DEAE53C0E69AE148CB2E1D0…") { Expires = DateTime.Now.AddHours(1), Domain = "dating.dk" });
    container.Add(new Cookie("ASP.NET_SessionId", "qin2ix2km0cpvtawphvjyupj") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });
    container.Add(new Cookie("InfinityScrollPositions", "Userhome%3A600") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });
    container.Add(new Cookie("__utma", "16287657.943558949.1379878207.1379878207.1379878207.1") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });
    container.Add(new Cookie("__utmb", "__utmb=16287657.64.10.1379878207") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });
    container.Add(new Cookie("InfinityScrollPositions", "Userhome%3A600") { Expires = DateTime.Now.AddHours(1), Domain = "domain.com" });

个人认为问题出在以下领域,我不知道如何复制。在上面的代码中,我在字典中添加了 string.empty。

这是浏览器版本中有效的字段:

------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$MultiUpload$fuFallbackGalleryImageUpload"; filename=""
Content-Type: application/octet-stream

如果有人感兴趣,我使用以下代码发布帖子:

 public static class FormUpload
    {
        private static readonly Encoding encoding = Encoding.UTF8;
        public static HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, Dictionary<string, string> postParameters, CookieContainer container)
        {
            string formDataBoundary = String.Format("----------{0:N}", Guid.NewGuid());
            string contentType = "multipart/form-data; boundary=" + formDataBoundary;

            byte[] formData = GetMultipartFormData(postParameters, formDataBoundary);

            return PostForm(postUrl, userAgent, contentType, formData, container);
        }
        private static HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData, CookieContainer container)
        {
            HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;

            if (request == null)
            {
                throw new NullReferenceException("request is not a http request");
            }

            // Set up the request properties.
            request.Method = "POST";
            request.ContentType = contentType;
            request.UserAgent = userAgent;
            request.CookieContainer = container;
            request.UserAgent =
                "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11";
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            request.Headers.Add("Accept-Language", "en-US,en;q=0.8,da;q=0.6");

            request.Headers.Add("Cache-Control", "max-age=0");
            request.ContentLength = formData.Length;

            // You could add authentication here as well if needed:
            // request.PreAuthenticate = true;
            // request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
            // request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("username" + ":" + "password")));

            // Send the form data to the request.
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(formData, 0, formData.Length);
                requestStream.Close();
            }

            return request.GetResponse() as HttpWebResponse;
        }

        private static byte[] GetMultipartFormData(Dictionary<string, string> postParameters, string boundary)
        {
            Stream formDataStream = new System.IO.MemoryStream();
            bool needsCLRF = false;

            foreach (var param in postParameters)
            {
                // Thanks to feedback from commenters, add a CRLF to allow multiple parameters to be added.
                // Skip it on the first parameter, add it to subsequent parameters.
                if (needsCLRF)
                    formDataStream.Write(encoding.GetBytes("\r\n"), 0, encoding.GetByteCount("\r\n"));

                needsCLRF = true;

                    string postData = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}",
                        boundary,
                        param.Key,
                        param.Value);
                    formDataStream.Write(encoding.GetBytes(postData), 0, encoding.GetByteCount(postData));

            }

            // Add the end of the request.  Start with a newline
            string footer = "\r\n--" + boundary + "--\r\n";
            formDataStream.Write(encoding.GetBytes(footer), 0, encoding.GetByteCount(footer));

            // Dump the Stream into a byte[]
            formDataStream.Position = 0;
            byte[] formData = new byte[formDataStream.Length];
            formDataStream.Read(formData, 0, formData.Length);
            formDataStream.Close();

            return formData;
        }

        public class FileParameter
        {
            public byte[] File { get; set; }
            public string FileName { get; set; }
            public string ContentType { get; set; }
            public FileParameter(byte[] file) : this(file, null) { }
            public FileParameter(byte[] file, string filename) : this(file, filename, null) { }
            public FileParameter(byte[] file, string filename, string contenttype)
            {
                File = file;
                FileName = filename;
                ContentType = contenttype;
            }
        }
    }

好的,很多代码和文本。任何有使用 multipart/form-data 制作 HTTP 帖子的经验的人都可能会给出一些提示。“302 found”可能是一个提示,我不知道。

非常感谢任何可以为我指明方向的帮助!

4

1 回答 1

4

首先,您可能会看到,您正在复制参数信息。

原帖:

------WebKitFormBoundaryTbZqL4CZcQwC7K58
Content-Disposition: form-data; name="__EVENTTARGET"

你的帖子:

------------63f74b64334e4c8fad891bd1f969402b
Content-Disposition: form-data; name="Content-Disposition: form-data; name="__EVENTTARGET""

使用您正在使用的代码,您只需要在字典中使用参数的名称,因为Content-Disposition: form-data; name=代码已经添加了:

string postData = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}",
                    boundary,            //^^^Right Here!^^^^
                    param.Key,
                    param.Value);

我的建议是保留 FormUpload 代码的原样,只需更改构建字典的方式即可。

//Change this...
namValCollection.Add("Content-Disposition: form-data; name=\"__EVENTTARGET\"", "ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$btnSend");
namValCollection.Add("Content-Disposition: form-data; name=\"__EVENTARGUMENT\"", string.Empty);
....

//...into this:
namValCollection.Add("__EVENTTARGET", "ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$btnSend");
namValCollection.Add("__EVENTARGUMENT", string.Empty);
....


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
. FormUpload 代码中处理文件上传的重要部分。在您的原始 POST 中,即使您实际上没有上传文件,似乎也会发送一个文件参数。您可以像在您链接的问题FormUpload.FileParameter中使用的那样使用该类,只需稍作调整:

namValCollection.Add("ctl00$ctl00$ctl00$ctl00$cphContent$cphMain$cphMain$userInfo$MultiUpload$fuFallbackGalleryImageUpload", new FormUpload.FileParameter(new byte[0]));
//Just use 'new FormUpload.FileParameter(new byte[0])' in place of actual file information if your not uploading a file.

将其重新添加到 FormUpload 代码中,但请确保更改一行:

if (param.Value is FileParameter)
{
    FileParameter fileToUpload = (FileParameter)param.Value;

    string header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\";\r\nContent-Type: {3}\r\n\r\n",
                    boundary,
                    param.Key,
                    fileToUpload.FileName ?? String.Empty, //Change this line from 'fileToUpload.FileName ?? param.Key.' to 'fileToUpload.FileName ?? String.Empty,'
                    fileToUpload.ContentType ?? "application/octet-stream");

    formDataStream.Write(encoding.GetBytes(header), 0, encoding.GetByteCount(header));

    formDataStream.Write(fileToUpload.File, 0, fileToUpload.File.Length);
}
else
{
    string postData = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}",
                    boundary,
                    param.Key,
                    param.Value);
    formDataStream.Write(encoding.GetBytes(postData), 0, encoding.GetByteCount(postData));
}
于 2013-09-22T23:11:55.840 回答