
###環境
Visual Studio 2017
Xamarin.android
javascript jquery ajax edmx
ASP.NET WEBAPI
###行いたいこと
ASP.NET WEBAPIを公開したが、アドレス送信でうまくPOST送信できるが、ajaxを利用してPOST送信をしてテーブルにデータをインサートしたい。
###起きていること
ASP.NETのWEBAPIの公開で以下の実装を行いました。
C#
1 [Route("thingC/Authors/{Action}/{id}")] 2 public class AuthorsWebApiController : ApiController 3 { 4 [HttpPost] 5 public void PostAuthors(string id, string kakaku)
以下のURIを叩くとAuthorsIDが12890634に価格が100円とテーブルにインサートされます。
~azurewebsites.net/thingC/Authors/PostAuthors/12890634?kakaku=100円
しかし、以下のajaxを利用してもインサートされませんでした。
javascript
1 (function() { 2 $.ajax({ 3 url: "~azurewebsites.net/thingC/Authors/PostAuthors/12890634", 4 type: 'POST', 5 cache: false, 6 dataType: 'json', 7 data : { kakaku : "100円" }, 8 success: function () { 9 alert('投稿できました。'); 10 } 11 }); 12 })();
###他に試したこと
javascript
1 (function() { 2 var inputSt = "100円"; 3 $.ajax({ 4 url: "~azurewebsites.net/thingC/Authors/PostAuthors/12890634?kakaku=" + inputSt, 5 type: 'POST', 6 cache: false, 7 dataType: 'json', 8 success: function () { 9 alert('投稿できました。'); 10 } 11 }); 12 })();
この方法ですとうまくテーブルにインサートできましたが、POSTなのにurlにパラメーターをつけていいものか悩んでいます。なぜ上の方法ではできなく、下の方法ではできたのか疑問です。上の形式での書き方で問題あれば教えて下さい。ASP.NET WEBAPIのajaxPOST送信について以下サイトなど参考にしていますが、ずっとうまくいきません。アドバイスよろしくお願い致します。
参考サイト:javatechnology.net/ajax/post-submit/
###アドバイス後に試したこと
javascript
1 (function() { 2 var j = { kakaku: "100円"}; // j はオブジェクト 3 var jsonString = JSON.stringify(j); // jsonString は文字列 4 $.ajax({ 5 type: "POST", 6 url: "~azurewebsites.net/thingC/Authors/PostAuthors/12890634", 7 data: jsonString, 8 contentType: "application/json; charset=utf-8", 9 success: function (data) { 10 alert('ok'); 11 }, 12 error: function (jqXHR, textStatus, errorThrown) { 13 alert('NG'); 14 } 15 }); 16 })();
NGとしてアラートが出てしまいました。もしまだ何か気付いた点などあれば、よろしくお願い致します。
###2018/02/03 18:39追記
気になった点として現状の状態報告です。
[HttpPost]としてテスト用にいくつも作っています。メソッド名が違うのですが、万が一この方法だと動かないなどとあればアドバイスお願い致します。その他このネームスペースの場所ではクラスを2つ設けています。そこでもメソッド名は違いますが、同様に[HttpPost]です。念のための追加情報でした。
C#
1namespace Decode2017iq155WebApi.Controllers.thingB.Authors 2{ 3 [Route("thingB/Authors/{Action}/{id}")] 4 public class AuthorsWebApiController : ApiController 5 { 6 [HttpGet] 7 public List<AuthorsDTO> GetAllAuthors(string id) 8 { 9 ・・・ 10 } 11 12 [HttpPost] 13 public void PostAuthors(string id,[FromBody] string author) 14 { 15 ・・・ 16 17 } 18 19 [HttpPost] 20 public void InsertAuthors([FromBody]AuthorsDTO author) 21 { 22 ・・・ 23 } 24 [Route("thingB/Authors/{Action}")] 25 public class AuthorsWebApiController2 : ApiController 26 { 27 [HttpPost] 28 public List<AuthorsDTO> InsertAuthorsMain([FromBody]AuthorsDTO author)
そしてGetAllCommentsというメソッド名のWEBAPI実行であれば、
https://decode2017iq155webapi2201801************.azurewebsites.net/thingB/Authors/InsertAuthorsMain/
これがURLという認識です。GETではこのルールのURLで受け取れているのですが、POSTは404エラーが出ている状態です。
###その後 アドバイスとほぼ同じコードで試した結果
WEBAPIの公開も言われたものとほぼ同じに公開し、スクリプト側も同じにしてみました。
相違点として以下があります。
①URLは絶対パス
②AuthorIdがAuthorIDでint型
③BizBがthingD
④『using Decode2017iq155WebInterfaces.thingB.ListAuthors;』がWEBAPIのクラスのusingに私のにはある
気になった点は、web.configに以下記載追記している
<system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*"/> <add name="Access-Control-Allow-Methods" value="POST"/> <add name="Access-Control-Expose-Headers" value="x-json"/> <add name="Access-Control-Allow-Headers" value="x-prototype-version, x-requested-with"/> <add name="Access-Control-Max-Age" value="604800"/> </customHeaders> </httpProtocol> </system.webServer>
このWebApiの他のメソッドではajaxで取得していましたのでクロスドメイン制約は解決しています。
その結果、404ではなく200が無事帰ってきましたが、表は表示されませんでした。
返却は
(なぜか画像が貼れないのでコード挿入方法で)
結果画面
GetAllAuthors InsertAuhtor textStatus: error, errorThrown: @section Scripts { }
JSON
┗0
┗xc02F
ResponseHeaders
HTTP/1.1 200 Connection Established
Security
Access-Control-Allow-Origin: *
Tranceport
Connection: close
◆IIS localhost/index.htmlに接続したとき
304返却
Inspector raws
GET http://localhost/ HTTP/1.1 Host: localhost Connection: keep-alive Cache-Control: max-age=0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: ja,en-US;q=0.9,en;q=0.8 If-None-Match: "a9c1edbba79dd31:0" If-Modified-Since: Sun, 04 Feb 2018 11:03:06 GMT
GETボタン押下後
200返却
Inspector raws
CONNECT decode2017iq155webap●●●●●●●●●.azurewebsites.net:443 HTTP/1.1 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below. Version: 3.3 (TLS/1.2) Random: 63 67 B4 86 17 3B 21 0F 30 F5 07 57 C7 07 75 18 43 61 78 A0 12 B8 9D 45 17 5D 04 26 8F 66 E6 90 "Time": 2041/08/13 10:24:51 SessionID: C9 4D 00 00 78 96 45 21 71 13 FA D6 4D 2A 18 31 2C D0 16 A2 E4 F7 A2 DD AA 04 62 79 03 E7 91 CB Extensions: 0xbaba empty renegotiation_info 00 server_name decode2017iq155webapi●●●●●●●●●●●.azurewebsites.net extended_master_secret empty SessionTicket empty signature_algs sha256_ecdsa, Unknown[0x8]_Unknown[0x4], sha256_rsa, sha384_ecdsa, Unknown[0x8]_Unknown[0x5], sha384_rsa, Unknown[0x8]_Unknown[0x6], sha512_rsa, sha1_rsa status_request OCSP - Implicit Responder SignedCertTimestamp (RFC6962) empty ALPN h2, http/1.1 ec_point_formats uncompressed [0x0] elliptic_curves unknown [0x6A6A), unknown [0x1D), secp256r1 [0x17], secp384r1 [0x18] 0x8a8a 00 padding 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Ciphers: [6A6A] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/ [C02B] TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 [C02F] TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 [C02C] TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 [C030] TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 [CCA9] TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 [CCA8] TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 [C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA [C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA [009C] TLS_RSA_WITH_AES_128_GCM_SHA256 [009D] TLS_RSA_WITH_AES_256_GCM_SHA384 [002F] TLS_RSA_AES_128_SHA [0035] TLS_RSA_AES_256_SHA [000A] SSL_RSA_WITH_3DES_EDE_SHA Compression: [00] NO_COMPRESSION






回答3件
あなたの回答
tips
プレビュー