Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WOPI Host implementation, trying to render doc in iframe asp.net mvc

I'm trying to get Wopi host implementation in an ASP.NET MVC application.

Using this project https://code.msdn.microsoft.com/office/Building-an-Office-Web-f98650d6

I don't get any calls hitting my API Controler

enter image description here

Discovery URL

<action name="view"
              ext="docx"
              default="true"
              urlsrc="http://word-edit.officeapps.live.com/wv/wordviewerframe.aspx?&lt;ui=UI_LLCC&amp;&gt;&lt;rs=DC_LLCC&amp;&gt;&lt;showpagestats=PERFSTATS&amp;&gt;" />

URL generated by my application

http://word-edit.officeapps.live.com/we/wordeditorframe.aspx?WOPISrc=http%3a%2f%2flocalhost%3a32876%2fapi%2fwopi%2ffiles%2ftest.docx&access_token=XskWxXK0Nro%3dhwYoiCFehrYAx85XQduYQHYQE9EEPC6EVgqaMiCp4%2bg%3d

I am using Local Host for testing purpose

Controller Route

 [RoutePrefix("api/wopi")]
        public class FilesController : ApiController


[Route("files/{name}/")]
        public CheckFileInfo GetFileInfo(string name, string access_token)
        {
            Validate(name, access_token);

            var fileInfo = _fileHelper.GetFileInfo(name);

            bool updateEnabled = false;
            if (bool.TryParse(WebConfigurationManager.AppSettings["updateEnabled"].ToString(), out updateEnabled))
            {
                fileInfo.SupportsUpdate = updateEnabled;
                fileInfo.UserCanWrite = updateEnabled;
                fileInfo.SupportsLocks = updateEnabled;
            }

            return fileInfo;
        }

        // GET api/<controller>/5
        /// <summary>
        /// Get a single file contents
        /// </summary>
        /// <param name="name">filename</param>
        /// <returns>a file stream</returns>
        [Route("files/{name}/contents")]
        public HttpResponseMessage Get(string name, string access_token)
        {
            try
            {
                Validate(name, access_token);
                var file = HostingEnvironment.MapPath("~/App_Data/" + name);
                var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
                var stream = new FileStream(file, FileMode.Open, FileAccess.Read);

                responseMessage.Content = new StreamContent(stream);
                responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                return responseMessage;

            }
            catch (Exception ex)
            {
                var errorResponseMessage = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                var stream = new MemoryStream(UTF8Encoding.Default.GetBytes(ex.Message ?? ""));
                errorResponseMessage.Content = new StreamContent(stream);
                return errorResponseMessage;
            }

        }

It is not hitting to the API URL

like image 462
ZCoder Avatar asked Oct 20 '25 05:10

ZCoder


1 Answers

WOPISrc cannot be 'localhost', it must be a link that office application server can access,

While you use office online application, then you need to provide a public ip or domain name of your wopi server instead of 'localhost'

like image 182
Hassan Alhaj Avatar answered Oct 22 '25 18:10

Hassan Alhaj



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!