質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

5986閲覧

ASP.NETでhtmlからajax経由でPOSTするもローカルIISで上手くいかない

snow0802

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2017/06/06 09:00

###前提・実現したいこと
ASP.NETでhtmlからコントローラーのメソッドをPOSTで呼び出したいです。

ASP.NETで、
・htmlファイル1つ
・コントローラー1つ
を追加したプロジェクトを作成しました。

htmlからコントローラーのメソッドを呼び出そうとしているのですが、
Visual Studioで「IIS Express」でデバッグしている時は動作するのですが、
サーバーを「ローカルIIS」にした途端に、

コンパイル エラー メッセージ: CS0016: 出力ファイル 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\jsonsample\2ab55d3a\d7a160f1\App_global.asax.ibkym4kq.dll' に書き込めませんでした -- 'ディレクトリ名が無効です。 '

というエラーメッセージが表示されます。
(アクセス権限の問題?)

Web Deployパッケージを発行し、
Windows Server 2008 R2 StandardのIISに展開してみても、
index.htmlは表示されるのですが、
コントローラー側のメソッドが呼び出されません。
(別の問題?)

ご教示願います。

###該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.Security; 6using System.Web.SessionState; 7 8using System.Web.Http; 9 10namespace jsonSample 11{ 12 public class Global : System.Web.HttpApplication 13 { 14 15 protected void Application_Start(object sender, EventArgs e) 16 { 17 GlobalConfiguration.Configure(config => 18 { 19 config.Routes.MapHttpRoute( 20 name: "DefaultApi", 21 routeTemplate: "api/{controller}/{action}/{id}", 22 defaults: new { id = RouteParameter.Optional }); 23 }); 24 }

C#

1//TestController.cs 2using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Net; 6using System.Net.Http; 7using System.Web.Http; 8using log4net; 9 10using System.ServiceModel; 11using System.ServiceModel.Activation; 12using System.ServiceModel.Web; 13 14namespace jsonSample 15{ 16 [ServiceContract(Namespace = "")] 17 [AspNetCompatibilityRequirements(RequirementsMode = 18 AspNetCompatibilityRequirementsMode.Allowed)] 19 public class TestController : ApiController 20 { 21 log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 22 23 [HttpPost] 24 [ActionName("GetJSON")] 25 [OperationContract, WebInvoke(Method = "POST")] 26 public HttpResponseMessage GetJSON() 27 { 28 JsonData json = new JsonData(); 29 json.msg = "これはテストです。"; 30 json.value = 200; 31 return Request.CreateResponse(HttpStatusCode.OK, json); 32 } 33 34 [HttpPost] 35 [ActionName("PostJSON")] 36 [OperationContract, WebInvoke(Method = "POST")] 37 public HttpResponseMessage PostJSON([FromBody]JsonData json) 38 { 39 string retJSON = "msg:" + json.msg + ", value:" + json.value.ToString(); 40 41 return Request.CreateResponse(HttpStatusCode.OK, retJSON); 42 } 43 } 44 45 // jsonを扱うクラス 46 public class JsonData 47 { 48 public string msg { get; set; } 49 public int value { get; set; } 50 } 51}

html

1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml"> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> 7 <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 8 <script type="text/javascript"> 9 10 // jsonを取得 11 function getJSON() { 12 $.ajax("/api/Test/GetJSON/", { 13 type: "POST", 14 success: function (data, status, xhr) { 15 var result = "msg:" + data.msg + ", value:" + data.value; 16 $("#Result").text(result); 17 }, 18 error: function (data, status, xhr) { 19 $("#Result").text(xhr.responseText); 20 } 21 }); 22 } 23 24 // jsonを送信 -> 文字を組み立てて返答される 25 function sendJSON(msg, val) { 26 var obj = { "msg": msg, "value": val }; 27 var arg = JSON.stringify(obj); 28 $.ajax("/api/Test/PostJSON/", { 29 type: "POST", 30 datatype: "json", 31 data: arg, 32 contentType: "application/json; charset=utf-8", 33 success: function (data, status, xhr) { 34 var ret = data + ", status:" + status; 35 $("#Result").text(ret); 36 }, 37 error: function (data, status, xhr) { 38 $("#Result").text(xhr.responseText); 39 } 40 }); 41 } 42 </script> 43</head> 44<body> 45 <h1>json受け渡しテスト</h1> 46 47 <div> 48 <button onclick="sendJSON('ボタン1', 1)">送信1</button> 49 <button onclick="sendJSON('ボタン2', 2)">送信2</button> 50 <button onclick="sendJSON('ボタン3', 3)">送信3</button> 51 <br /><br /> 52 <button onclick="getJSON()">json取得</button> 53 <br /><br /> 54 <div id="Result">ここに結果が入ります</div> 55 </div> 56</body> 57</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

開発環境を書いてください。

あと、何を作っているのか書いてください? コードを拝見すると ApiController を使っていて ASP.NET Web API アプリかと思ったのですが、ServiceContract 属性があって WCF のようでもありますし、何が何だかわからないです。

ASP.NETでhtmlからコントローラーのメソッドをPOSTで呼び出したいです。

「htmlから」も「ajax経由」も「POST」も関係なくて、それ以前にローカル IIS で動く ASP.NET Web アプリが作れてないように思えます。

Web Forms でも MVC でもどちらでもいいですから、まずはローカル IIS で動く ASP.NET Web アプリを作ってください。

もし、既存のものがあれば、それをベースに話をした方が良いと思います。

投稿2017/06/06 10:37

編集2017/06/06 10:44
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

snow0802

2017/06/06 14:13

迅速なご回答、ご助言ありがとうございます! Visual StudioからASP.NET Web アプリケーションを作成し、空のプロジェクトから自分でApiControllerを追加して作っていました。 ServiceContractはどうしても分からず苦肉の策で「これ付けたら外部から呼び出せるのでは?」と思ったのですが、全くの検討違いだったのですね。。 >それ以前にローカル IIS で動く ASP.NET Web アプリが作れてないように思えます。 おっしゃる通りです。 まずはローカルIISで動くMVCのASP.NET Webアプリを作成することから始めてみようと思います。 間違っている方向が明確に見えたので大変助かりました! ありがとうございます!
退会済みユーザー

退会済みユーザー

2017/06/07 00:20 編集

> まずはローカルIISで動くMVCのASP.NET Webアプリを作成することから始めてみようと思います。 そうしてください。 MVC のアクションメソッドはごく普通に作って「htmlからajax経由でPOST」で呼び出して、質問者さんの jQuery ajax のコードの success: function (data, status, xhr) の引数 data に応答を受け取ることは可能です。 ApiController を使うとか ServiceContract 属性を付与するとかは全く必要ないです(はっきり言わせていただければ完全に見当ハズレの方向に進んでます)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問